你怎么知道列表的元素是奇数还是偶数?
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.
我写了两个谓词来确定构成序言列表的元素是奇数还是偶数,但它不起作用。为什么?
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.