【问题标题】:How to know if a Peano number is even如何知道Peano数是否为偶数
【发布时间】:2018-11-15 19:10:03
【问题描述】:

所以我很难与 Peano 一起尝试,我需要一些帮助。我想知道Peano数是否是偶数,如果是,则添加:

0 + s(s(0)) = s(s(0))
0 + s(0) = No because one of the numbers odd

我目前的代码:

s(0).
s(X):- 
    X.

add(0,Y,Y).
add(s(X), Y, s(Z)):- 
    add(X,Y,Z).

【问题讨论】:

  • 您的s/1 谓词不是必需的。 Prolog 结构和 Prolog 谓词具有相同的形状,但它们不是同一个东西,这让初学者感到困惑。对于 Peano 数字,您需要 s/1 作为结构或函子,而不是谓词。

标签: prolog successor-arithmetics


【解决方案1】:

不要将皮亚诺数字视为数字而是符号。

意识到偶数 Paeno 数字是 0 和模式 s(s(X)) 的重复,其中 X 可以是 0 或模式 s(s(X))

我还将0s(0) 等视为数据,而您使用s 作为谓词名称。我并不是说它不会以这种方式工作,但我不是这么想的。

谓词的名称是paeno_even,它有一个参数。

基本情况是

paeno_even(0).

递归情况下一个

paeno_even(P)

而对 P 的处理只是删除了s(s(X)),所以在头部这样做

paeno_even(s(s(X)))

然后进行递归调用

paeno_even(s(s(X))) :-
    paeno_even(X).

几个测试来证明:

?- paeno_even(0).
true.

?- paeno_even(s(0)).
false.

?- paeno_even(s(s(0))).
true.

?- paeno_even(s(s(s(0)))).
false.

整个代码作为一个sn-p:

paeno_even(0).
paeno_even(s(s(X))) :-
    paeno_even(X).

【讨论】:

  • 我也有办法,但你的方法更好。我将 s(s(0)) 减去一个对函数的递归调用。
猜你喜欢
  • 1970-01-01
  • 2019-12-20
  • 2014-07-26
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多