假设我有一个列表[1, 1, 1, 1]
。我需要一种方法来检查IF列表中的每个元素都是等于返回是否则返回否
不使用任何内置谓词。
list(3,3)
- >>是的,list(3,3,6)
- >>没有
我想出了这条规则,但它不起作用
equal([E1,E2|T]):- E1=:=E2,
equal([E2,E3|T]).
答案 0 :(得分:5)
通常,这样的谓词是使用一般相等来定义的,而不是算术相等:
equal(Xs) :-
maplist(=(_), Xs).
可能是最具洞察力的定义。这使用maplist/2
通常定义为
maplist(_, []).
maplist(C, [E|Es]) :-
call(C, E),
maplist(C, Es).
否则:
equal(Xs) :-
equals_to(Xs,_).
equals_to([], _).
equals_to([E|Es], E) :-
equals_to(Es, E).
答案 1 :(得分:1)
那E3
突然出现了。我想你想要
equal([]).
equal([X]).
equal([E1,E2|T]) :-
E1 =:= E2,
equal([E2|T]).