【发布时间】:2020-04-10 17:55:28
【问题描述】:
我是 Prolog 的新手,但我仍然习惯它的逻辑。
我的任务是创建将自然数转换为“S 数”的函数,反之亦然。
所以数字 0 将是 0。
第 1 位是 s(0)。
2 号将是 s(s(0))。
等等。
nat(0).
nat(s(0)):- nat(X).
我已经拥有的给定 S 数的自然数的函数:
s2nat(0, 0) :- !.
s2nat(s(S),Number) :- s2nat(S,NewNumber), Number is NewNumber + 1.
所以?- s2nat(s(s(s(0))), X) 会给出X=3 作为输出。
现在我需要编写一个相反的函数:返回给定自然数的 S 数。
我在这里卡住了。我不太明白如何编写条件,以便 Prolog 明白我需要返回 s(S)。条件Number is NewNumber + 1 不再起作用,无法返回到“0”。
你有什么建议吗?
【问题讨论】:
-
您发表了类似
sick logic的评论,然后您希望得到帮助? -
如果
Number is NewNumber + 1适用于从 0 上升,NewNumber is Number - 1将适用于下降至 0。
标签: prolog successor-arithmetics