我想编写一个谓词来接收列表,并且如果列表的第一个元素为“#”,则为true,但是我不希望它统一以防万一。
例如
? - List=[#, _ , _ ,_]
? - mypredicate(List)
true.
? - List=[_,#, _ , _ , _]
? - mypredicate(List)
False.
我写的是:
mypredicate([L]) :-
nth0(0, L, #).
问题在于,如果第一个元素不是“#”,那么它将通过将#统一为第一个元素来更改列表L。我不希望它统一,只希望它检查是对还是错。
我还写道:我还需要一个不同的谓词来验证“#”是否为列表的最后一个元素:
mypredicate2(L) :-
last(L, #).
两个谓词上的问题相同,如果还不是#,它将原始列表的元素更改为#。我不希望它统一。
答案 0 :(得分:0)
您可以使用==/2
[swi-doc]来检查是否:
True
如果Term1
等于Term2
。变量仅与共享变量相同。
因此,您可以在此处编写如下的谓词:
mypredicate([X|_]) :-
X == # .
作为练习,我留下谓词来检查最后一项是否为#
。