【发布时间】:2014-03-18 11:46:50
【问题描述】:
在我最近在大学逻辑编程考试中遇到的一个问题中,我被要求编写一个 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 中实现这个谓词吗?
【问题讨论】:
-
剪切 (
!) 使您的定义不完整:odd(X),X=s(s(s(0)))失败,但应该像X=s(s(s(0))),odd(X)一样成功
标签: prolog successor-arithmetics