定义成员的子句和构造谓词even_member的构造子句

时间:2010-10-12 06:43:56

标签: prolog

我完成了我的prolog编码,运行时没有错误。但仍然无法得到我想要的输出。所以我想问问题在哪里。我的编码就像轰鸣声

even_member(X, [X|_]).

even_member(X, [_|Tail]) :-
    0 is X mod 2,
    write(X), nl,
    even_member(X, Tail).

我需要的输出是当键入even_member(2,[1,2,3,4,5,6])时。将获得像bellow

的输出

X = 2

X = 4

X = 6

任何人都可以帮我告诉我编码的问题是什么。谢谢。

1 个答案:

答案 0 :(得分:1)

我可以建议:

even_member(X, List) :-
    member(X, List),
    0 is X mod 2.

在评估时,给出:

?- even_member(X,[1,2,3,4,5,6]).
X = 2 ;
X = 4 ;
X = 6 ;
false.

否则,如果您想要一次性打印所有值的行为,您可以尝试:

even_member(List) :-
    member(X, List),
    0 is X mod 2,
    write(X), nl,
    fail ; true.

在评估时,我们得到:

?- even_member([1,2,3,4,5,6]).
2
4
6
true.