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

问题描述 投票:1回答:1

[我想编写一个接收列表的谓词,如果列表的第一个元素为'#',则为true,但如果不是这样,我不希望它统一。

例如

? -列表= [#,_,_,_]

? -mypredicate(列表)

true。

? -列表= [_,#,_,_,_]

? -mypredicate(列表)

假。

我写的是:

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

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

我还写了一个谓词来验证'#'是否是列表的最后一个元素,我写道:

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

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

prolog swi-prolog
1个回答
0
投票

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

==/2 如果True等于Term1。变量仅与共享变量相同。

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

Term2

我离开谓词来检查最后一项是否为mypredicate([X|_]) :- X == # .作为练习。

© www.soinside.com 2019 - 2024. All rights reserved.