在我最近在大学逻辑编程考试中遇到的一个问题中,我被要求编写一个 Prolog 谓词,odd/1
来确定给定值是否为奇数。
该实现应该使用已经给定的 predicate s/1
,它将评估给定元素的后继(即 X + 1)。这是为实现odd/1
谓词给出的解决方案:
odd(s(0)):-!. % 1 is the first odd number
odd(s(s(X))):- odd(X). % A number s(s(X)) (i.e X + 2) is odd if X is odd as well
!
第一个表达式中的 真的有任何用途吗?我知道它可以防止在此之后回溯,但是没有以下表达式?这是否意味着解析算法在这一点上停止了?- 为了练习,我尝试实现
s/1
后继谓词,但无法做到。(如何)可以在 Prolog 中实现这个谓词吗?