问题标签 [successor-arithmetics]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
binary - Prolog 中的一元和二元算术运算
我正在尝试在 Prolog 中进行一元和二元算术运算。
一元数定义为bot=0
和s(X)=x+1
,例如3是s(s(s(bot)))
。
二进制数表示为一系列Z
s 和O
s,当Z
数字0和O
数字1从最低有效位到最高有效位时。例如4是z(z(o(bot)))
.
当我使用形式的谓词power(z(o(bot),z(o(bot)),Result).
但是当我尝试类似power(X,z(o(bot)),z(o(o(bot))) ).
它崩溃的东西时,一切都很好。
prolog - 为什么我的谓词 div/4 在给我一个答案后进入无限循环?
我正在尝试使用 Peano Axioms 实现欧几里得除法(a = bq + r),到目前为止我已经完成了这个谓词:
每个谓词似乎都可以正常工作,我遇到的一个问题是:
给我正确的答案,然后进入无限循环而不是说没有更多的答案。
我不明白为什么 div/4 不停止,知道为什么吗?
提前致谢
prolog - 使用 Prolog 计算自然数的 s 数
我是 Prolog 的新手,但我仍然习惯它的逻辑。
我的任务是创建将自然数转换为“S 数”的函数,反之亦然。
所以数字 0 将是0
。
1 号将是s(0)
.
2 号将是s(s(0))
.
等等。
我已经拥有了为给定 S 数查找自然数的函数:
所以?- s2nat(s(s(s(0))), X)
会X=3
作为输出。
现在我需要编写一个相反的函数:返回给定自然数的 S 数。
在这里我被困住了。我不太明白如何编写条件,以便 Prolog 明白我需要s(S)
返回。该条件Number is NewNumber + 1
不再适用于返回并达到“0”。
你有什么建议吗?
recursion - Prolog peano 数字差/减法
我正在尝试计算“Peano numbers”(Recursive definition of natural numbers represented as s(0), s(s(0)) etc.
)的差异,但我有点被一个问题困住了。
减法的定义如下:
s(X) - 0 = s(X)
s(X) - s(s(X)) = 0
s(X) - s(X) = 0
s(s(X)) - s(X) = s(0)
0 - s(X) = 0
这是我当前的代码:
我背后的思考过程:
因为我真的不需要递归地增加差异,所以我可以使用X
递归后剩下的最后一个作为结果。
出于某种原因,以下问题有效:
?- sub(s(0), s(0), X)。
X = 0 ;
但是这个没有:
?- sub(s(s(0)), s(s(0)), X)。
错误的。
谁能指出我的错误或提出更好的方法来实现子程序?
这可能是初学者的错误,因为我真的没有做太多。对不起,如果是这样的话。
//编辑 这就是我解决它的方法
prolog - Prolog 中的时间、商和余数谓词
我该怎么做以下。
我需要定义谓词shownumber (X,N)
,当符号 X 对应于自然数 N 时为真。例如,shownumber(s(zero),1)
为真。好的,现在我有一个谓词:
现在我需要使用shownumber (X, Y)
谓词来定义:
1)times (X, Y, Z)
如果 X * Y = Z,则为真。
2)quotient (X, Y, Q)
如果 X / Y = Q(在自然数算术中),则为真
3)remainder (X, Y, R)
如果 X 除以 Y 得到余数 R,则为真。
和必须定义为 Y = 零quotient (X, Y, Q)
。remainder (X, Y, R)
我怎样才能做到这一点?你能帮我做这个吗?
prolog - Prolog: nat(s(s(0))) 到“正常”十进制数
如果在 Prolog 中这样定义整数:
如何将这样的数字转换为十进制数?
输入例如:
s(s(s(0)))
我可能应该补充一点,我对 Prolog 很陌生。
编辑:我这样试过:
list - Prolog 谓词将两个列表相乘(表示一元数)
我想编写一个将表示数字的列表相乘的代码,例如:
?-次([1,1,1],[1,1],Res)。
水库 = [1,1,1,1,1,1]。
我已经有了上面的代码,它有点像我想要的,但不是真的。例如在询问时:
?- times([1,1,1], [1,1], Res)
Res = [[1,1],[1,1],[1,1]]。
这个想法就在那里,但我只是不知道如何解决这个问题,我理解它为什么会发生(我正在添加一个列表作为头部),所以我只是想知道是否有人可以帮助我。
提前致谢。
recursion - Prolog中的递归成功加法
我不明白这个是如何工作的。如果我运行查询:
它如何从第一个参数中删除 succ ?
如果我运行它:
这满足了身体。我们将它们输入到头部:
即它看起来好像它只是添加了成功,而不是从第一个参数中删除它们?我看到关于这个确切问题的另一篇文章,但这对我来说没有意义。
prolog - Peano算术中的`less/2`关系
Peano算术中的这个小于谓词
循环时
有没有更好的写作方式less/2
(仅使用 Horn 子句)?
recursion - Prolog:递归后继定义的自然数乘法谓词不终止
我正在使用 prolog 中的自然数定义,它使用 s(0)、s(s(0))) 等等来定义自然数。有添加谓词:
现在最初 mult 是这样定义的:
但是我发现如果我使用变量查询,这会导致堆栈溢出,比如:
所以我添加了两个带有约束的附加子句,说明如果只有一个参数是变量,这意味着只存在一个解决方案,因此在这些情况下找到解决方案后程序不应回溯。这有效并停止了之前发生的堆栈溢出,子句如下所示:
我现在的问题是找出一种方法来解释以这种方式查询的情况,我希望程序找到一个数字的所有因素。如果我尝试查询
我会得到因素,但程序会挂起,永远不会终止,然后导致堆栈溢出。我不太确定如何限制这种情况,并且在搜索树上设置手动绑定似乎既不是一个好主意,也不是解决此问题的正确方法。