所以在这里,对于我的数独项目,我有一个列表,例如:
L = [_G1-0:0:0,_G19-0:6:2,_G22-0:7:2,_G25-0:8:2].
我想过滤它以仅获取自由变量:
[_G1, _G19, _G22 and _G25].
所以想要那个,我写了这个谓词:
remove_position([], []) :- !.
remove_position([X-_|Xs], [X|Rs]) :- remove_position(Xs, Rs).
打电话时
?- remove_position(L, Result).
SWI-Prolog 答案
false.
所以我稍微编辑了谓词:
remove_position([], []) :- !.
remove_position([X-_:_:_|Xs], [X|Rs]) :- remove_position(Xs, Rs).
现在它按预期工作:
?- remove_position(L, Result).
Result = [_G1, _G19, _G22, _G25].
尽管如此,我还是看不出第一个有什么问题,对我来说,SWI-Prolog 应该将 0:0:0 与 _ 以及与 _:_:_ 匹配。有什么我没有得到的吗?或者它是一个 SWI-Prolog 错误?
感谢您的任何启发!