Prolog谓词,如果#是列表的第一个元素,则返回true

时间:2020-04-25 20:46:32

标签: prolog

我想编写一个谓词来接收列表,并且如果列表的第一个元素为“#”,则为true,但是我不希望它统一以防万一。

例如

? - List=[#, _ , _ ,_]

? - mypredicate(List)
true.

? - List=[_,#, _ , _ , _]

? - mypredicate(List)
False.

我写的是:

mypredicate([L]) :-
    nth0(0, L, #).

问题在于,如果第一个元素不是“#”,那么它将通过将#统一为第一个元素来更改列表L。我不希望它统一,只希望它检查是对还是错。

我还写道:我还需要一个不同的谓词来验证“#”是否为列表的最后一个元素:

mypredicate2(L) :-
    last(L, #).

两个谓词上的问题相同,如果还不是#,它将原始列表的元素更改为#。我不希望它统一。

1 个答案:

答案 0 :(得分:0)

您可以使用==/2 [swi-doc]来检查是否:

True 如果Term1等于Term2 。变量仅与共享变量相同。

因此,您可以在此处编写如下的谓词:

mypredicate([X|_]) :-
    X == # .

作为练习,我留下谓词来检查最后一项是否为#