2010-10-12 85 views
1

我做了我的序言编码,运行时没有错误。但仍然无法获得我想要的输出。所以我想问问题在哪里。我的编码是像波纹管子句为谓词定义成员和构造子句even_member

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])。将得到的输出像波纹管

X = 2

X = 4

X = 6

谁能帮助我,告诉我什么是对我的编码问题。谢谢。

+0

在提出更多问题之前,您应该接受旧问题的答案。你的问题也没有多大意义。你的意思是'even_member(X,[1,2,3,4,5,6])'而不是'even_member(2,[1,2,3,4,5,6])'? – Cephalopod 2010-10-12 19:32:25

回答

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.