prolog规则,将整数列表作为输入,如果列表的元素全部相等则返回"是",否则返回"否"

use*_*463 1 prolog

假设我有一个清单[1, 1, 1, 1].我需要一种方法来检查IF中这个列表中的每个元素都是相等的返回yes否则返回no而不使用任何内置谓词. list(3,3)- >>是的,list(3,3,6)- >>不,我想出了这个规则,但它不起作用

equal([E1,E2|T]):- E1=:=E2,
       equal([E2,E3|T]).
Run Code Online (Sandbox Code Playgroud)

fal*_*lse 5

通常,这样的谓词是使用一般相等而不是算术相等来定义的:

equal(Xs) :-
   maplist(=(_), Xs).
Run Code Online (Sandbox Code Playgroud)

可能是最具洞察力的定义.这maplist/2通常用作定义

maplist(_, []).
maplist(C, [E|Es]) :-
   call(C, E),
   maplist(C, Es).
Run Code Online (Sandbox Code Playgroud)

除此以外:

equal(Xs) :-
   equals_to(Xs,_).

equals_to([], _).
equals_to([E|Es], E) :-
   equals_to(Es, E).
Run Code Online (Sandbox Code Playgroud)