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

时间:2014-02-10 20:10:07

标签: prolog

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

equal([E1,E2|T]):- E1=:=E2,
       equal([E2,E3|T]).

2 个答案:

答案 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]).