问题标签 [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.

0 投票
0 回答
255 浏览

binary - Prolog 中的一元和二元算术运算

我正在尝试在 Prolog 中进行一元和二元算术运算。

一元数定义为bot=0s(X)=x+1,例如3s(s(s(bot)))

二进制数表示为一系列Zs 和Os,当Z数字0O数字1从最低有效位到最高有效位时。例如4z(z(o(bot))).

当我使用形式的谓词power(z(o(bot),z(o(bot)),Result). 但是当我尝试类似power(X,z(o(bot)),z(o(o(bot))) ).它崩溃的东西时,一切都很好。

0 投票
2 回答
112 浏览

prolog - 为什么我的谓词 div/4 在给我一个答案后进入无限循环?

我正在尝试使用 Peano Axioms 实现欧几里得除法(a = bq + r),到目前为止我已经完成了这个谓词:

每个谓词似乎都可以正常工作,我遇到的一个问题是:

给我正确的答案,然后进入无限循环而不是说没有更多的答案。

我不明白为什么 div/4 不停止,知道为什么吗?

提前致谢

0 投票
1 回答
194 浏览

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”。

你有什么建议吗?

0 投票
1 回答
212 浏览

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)。
错误的。

谁能指出我的错误或提出更好的方法来实现子程序?
这可能是初学者的错误,因为我真的没有做太多。对不起,如果是这样的话。

//编辑 这就是我解决它的方法

0 投票
1 回答
298 浏览

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)

我怎样才能做到这一点?你能帮我做这个吗?

0 投票
1 回答
134 浏览

prolog - Prolog: nat(s(s(0))) 到“正常”十进制数

如果在 Prolog 中这样定义整数:

如何将这样的数字转换为十进制数?

输入例如:

s(s(s(0)))

我可能应该补充一点,我对 Prolog 很陌生。

编辑:我这样试过:

0 投票
1 回答
87 浏览

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]]。

这个想法就在那里,但我只是不知道如何解决这个问题,我理解它为什么会发生(我正在添加一个列表作为头部),所以我只是想知道是否有人可以帮助我。
提前致谢。

0 投票
1 回答
117 浏览

recursion - Prolog中的递归成功加法

我不明白这个是如何工作的。如果我运行查询:

它如何从第一个参数中删除 succ ?

如果我运行它:

这满足了身体。我们将它们输入到头部:

即它看起来好像它只是添加了成功,而不是从第一个参数中删除它们?我看到关于这个确切问题的另一篇文章,但这对我来说没有意义。

0 投票
1 回答
112 浏览

prolog - Peano算术中的`less/2`关系

Peano算术中的这个小于谓词

循环时

有没有更好的写作方式less/2(仅使用 Horn 子句)?

0 投票
0 回答
46 浏览

recursion - Prolog:递归后继定义的自然数乘法谓词不终止

我正在使用 prolog 中的自然数定义,它使用 s(0)、s(s(0))) 等等来定义自然数。有添加谓词:

现在最初 mult 是这样定义的:

但是我发现如果我使用变量查询,这会导致堆栈溢出,比如:

所以我添加了两个带有约束的附加子句,说明如果只有一个参数是变量,这意味着只存在一个解决方案,因此在这些情况下找到解决方案后程序不应回溯。这有效并停止了之前发生的堆栈溢出,子句如下所示:

我现在的问题是找出一种方法来解释以这种方式查询的情况,我希望程序找到一个数字的所有因素。如果我尝试查询

我会得到因素,但程序会挂起,永远不会终止,然后导致堆栈溢出。我不太确定如何限制这种情况,并且在搜索树上设置手动绑定似乎既不是一个好主意,也不是解决此问题的正确方法。