在我最近在逻辑编程的大学水平考试中遇到的一个问题中,我被要求编写Prolog谓词 odd/1
,它确定给定值是否为奇数 .
该实现应该使用已经给定的谓词 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中实现这个谓词?
1 回答
这是没有切割的痕迹
这里有切口
我认为已经增加了效率......
关于s / 1,它不是谓词,而是数据结构 . 也许你已经看过类似的东西
这实际上是(正)整数无限域的最简单的递归定义