【发布时间】:2015-02-28 18:40:56
【问题描述】:
请帮助我计算 Prolog 列表中的偶数。我是初学者,昨天刚开始学习Prolog。我知道要计算列表中的元素是
mylen([H|Lc],N) :- mylen(Lc,M),N is M+1.
mylen([],0).
我认为在这种情况下定义偶数可能会有所帮助,我猜代码可能类似于:
even(n):-
N rem 2 =:= 0.
你能帮我把这两个部分放在一起,让我的代码计算偶数吗?我知道我还需要添加一个计数器,但我不知道如何在 Prolog 中执行此操作。
非常感谢您的帮助!
【问题讨论】:
-
如果
N是偶数,even(N) :- N rem 2 =:= 0.将是 true。首先尝试更清楚地描述您的谓词。例如,一个没有偶数的空列表是mylen([], 0).你可以有另一个规则说,一个列表[H|T], hasNeven numbers ifH是偶数,T有N1偶数,N是N1 + 1。或者,如果H是奇数,则列表[H|T]有N偶数,而T有N偶数。 -
感谢您的帮助。但是我不知道如何在prolog中使用if语句。
-
这不是
if声明,本身。当您编写诸如foo(X,Y) :- bar(X), bah(Y).之类的谓词规则时,这意味着,foo(X,Y)为真ifbar(X)为真并且bah(Y)为真。您的谓词mylen([H|Lc],N) :- mylen(Lc,M),N is M+1.表示,[H|Lc]的长度是N如果Lc的长度是M和N是M+1。