有没有办法告诉Prolog列表中的元素可以是任何值?
我尝试使用_
,但它没有用。
我试图比较两个零和一个列表,但在某些地方我并不关心价值,例如:我希望[1,1,1] == [1,1,_]
返回true
其中{{1}是我不关心它的价值
答案 0 :(得分:6)
请改用以下内容:
[1,1,1] = [1,1,_]
==/2
测试等价,强于=/2
(实例化)。
答案 1 :(得分:0)
非统一替代方案:
forall(nth1(X, [1,1,1], Val), nth1(X, [1,1,_], Val)).
一些示例输入和输出显示差异的位置:
compare_lists(List1, List2) :-
forall(nth1(Index, List1, Value), nth1(Index, List2, Value)).
test_compare(CompPred, ComparedList) :-
call(CompPred, ComparedList, [1,1,_]).
?- test_compare(=, [X,1,1]), print(X).
1
X = 1.
?- test_compare(=@=, [X,1,1]), print(X).
false.
?- test_compare(==, [X,1,1]), print(X).
false.
?- test_compare(compare_lists, [X,1,1]), print(X).
_G648
true.