相关疑难解决方法(0)

在Prolog中将peano数字s(N)转换为整数

我在教程中遇到了逻辑数字的这种自然数字评估,这给我带来了一些麻烦:

natural_number(0).
natural_number(s(N)) :- natural_number(N).
Run Code Online (Sandbox Code Playgroud)

该规则大致说:如果N0很自然的,如果不是我们尝试发送的内容s/1回递归的规则,直到内容0,那么它是一个自然数如果不是那么它不是.

所以我测试了上面的逻辑实现,想到自己,如果我想代表s(0)as 1s(s(0))as 2,那么这是有效的,但我希望能够转换s(0)1.

我想到了基本规则:

sToInt(0,0). %sToInt(X,Y) Where X=s(N) and Y=integer of X
Run Code Online (Sandbox Code Playgroud)

所以这是我的问题:如何将s(0)转换为1并将s(s(0))转换为2?

已经回答了

编辑:我在实现中修改了基本规则,我接受的答案指向了我:

decode(0,0). %was orignally decode(z,0).
decode(s(N),D):- decode(N,E), D is E +1.

encode(0,0). %was orignally encode(0,z).
encode(D,s(N)):- D > 0, E is D-1, encode(E,N).
Run Code Online (Sandbox Code Playgroud)

所以我现在可以像我想的那样使用它,谢谢大家!

prolog successor-arithmetics clpfd

6
推荐指数
2
解决办法
2153
查看次数

标签 统计

clpfd ×1

prolog ×1

successor-arithmetics ×1