问题是:
当我们输入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)。
感谢您的帮助。
答案 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
尝试统一其参数。
计算赔率和赔率的数量可以以类似的方式进行,并留给读者练习。 : - )