在Prolog中将Peano数s(N)转换为整数 [英] Convert peano number s(N) to integer in Prolog
问题描述
我在一个教程中遇到了对逻辑数的自然数评估,这让我有些头疼:
I came across this natural number evaluation of logical numbers in a tutorial and it's been giving me some headache:
natural_number(0).
natural_number(s(N)) :- natural_number(N).
该规则粗略地指出:如果N
是0
,这是自然的;如果不是,我们尝试递归地将s/1
的内容发送回该规则,直到内容是0
,那么它是自然数如果不是,那么不是.
The rule roughly states that: if N
is 0
it's natural, if not we try to send the contents of s/1
back recursively to the rule until the content is 0
, then it's a natural number if not then it's not.
因此,我想,我测试了上述逻辑实现,如果我想将s(0)
表示为1
并将s(s(0))
表示为2
,则此方法有效,但是我希望能够转换s(0)
改为1
.
So I tested the above logic implementation, thought to myself, well this works if I want to represent s(0)
as 1
and s(s(0))
as 2
, but I´d like to be able to convert s(0)
to 1
instead.
我想到了基本规则:
sToInt(0,0). %sToInt(X,Y) Where X=s(N) and Y=integer of X
这是我的问题:如何将s(0)转换为1并将s(s(0))转换为2?
So here is my question: How can I convert s(0) to 1 and s(s(0)) to 2?
已回答
编辑:我在实现中修改了基本规则,我接受的答案将其指向了我:
I modified the base rule in the implementation which the answer I accepted pointed me towards:
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).
所以我现在可以按自己的意愿使用它了,谢谢大家!
So I can now use it like I wanted to, thanks everyone!
推荐答案
这是使用 library(clpfd)
:- use_module(library(clpfd)).
natsx_int(0, 0).
natsx_int(s(N), I1) :-
I1 #> 0,
I2 #= I1 - 1,
natsx_int(N, I2).
这篇关于在Prolog中将Peano数s(N)转换为整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!