如何使用PROLOG计算奇数和偶数

时间:2010-09-26 06:45:24

标签: list recursion prolog

问题是:

当我们输入mem([1,2,3,4,5])时。

我们将得到如下输出:

奇= 3

甚至= 2

我的编码就是这样,但无法运行。可以帮我查一下我的错误吗?

MEM(X,[X | L])。

MEM(X,[元素| L]): -     MEM([X,L])。

计数([],L,L)。

计数([X | H],L1,L2): -     写(偶数),     X%2 = 0,NL,     写(奇数),     X%2 - ; = 1,NL,     计数([H],[X | L1],L2)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您编写的程序有两个不同的东西,实际上并不属于一个。 mem/2等同于通常内置的member/2,除了你的定义包含错误:在第二个句子中element是一个原子而不是一个变量,所以它不匹配列表的其他元素。通常的定义是

member(X, [X|_]).
member(X, [_|L]) :- member(X, L).

请注意,此定义不仅会测试术语是否是列表的元素,还可以用于生成列表。

你在count/3尝试做什么:将列表分成两个列表,一个包含奇数,另一个包含偶数;或计算奇数和偶数元素的数量?分裂可以通过以下方式完成:

count([], [], []).
count([X|L], O, E) :- X rem 2 =/= 0, count(L, [X|O], E).
count([X|L], O, E) :- X rem 2 =:= 0, count(L, O, [X|E]).

请注意=/= /2=:= / 2强制将参数评估为算术表达式,而= /2尝试统一其参数。

计算赔率和赔率的数量可以以类似的方式进行,并留给读者练习。 : - )