你怎么知道列表的元素是奇数还是偶数?

How do you know if the elements of a list are odd or even?

我写了两个谓词来确定构成序言列表的元素是奇数还是偶数,但它不起作用。为什么?

odd([X]):- (X mod 2) = 0.
odd([T|Q]):- (T mod 2) = 0, odd(Q).

没有成功,因为:

  • 最重要的是:=检查统一。它不计算,这意味着 0 和 (X mod 2) 永远不能相等。使用 =:= 来比较算术项,计算两侧,或者如果只需要计算右侧则使用 is
  • 你把偶数和奇数搞混了。奇数 modulo 2 应该得到 1.
  • 另外:您没有空列表的模式。但是第二个规则已经涵盖了第一个,所以可以替换它。

放在代码中:

odd([]).
odd([T|Q]):- 1 is (T mod 2), odd(Q).

示例:

?- odd([4]).
false.
?- odd([3]).
true.
?- odd([3,5]).
true.
?- odd([3,6]).
false.