假设我有一个清单[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)
通常,这样的谓词是使用一般相等而不是算术相等来定义的:
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)