问题标签 [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 投票
1 回答
205 浏览

prolog - Prolog 在要求另一种解决方案时获得无限循环

我正在使用 SWI Prolog,我的作业中使用了以下代码(该代码不是作业,但需要编写课程所需的方法):

exp(a,b,c)意味着c=b^a

它直接从书中复制:“Prolog的艺术:高级编程技术”。

当我运行以下查询时:

我得到一个答案:

但是当我通过输入要求另一个答案时;

我得到一个无限循环(以堆栈外错误结束),我希望得到错误。

代码中的问题是什么?是否有相同的代码(具有相同的自然数表示)但行为方式与我描述的方式相同?如果是这样,一些指示或建议会很有帮助。

提前致谢。

0 投票
3 回答
1832 浏览

prolog - 用另一种方法将两个整数相除

让我们考虑 n=s(s(...s(0)...)) (简单地说 n= s^n(0))。如何编写一个计算两个整数相除的程序?我的意思是 s^(n//m) (这是除法的定义)。有任何想法吗?例如,如果我们有一个问题:

我写了以下代码:

0 投票
2 回答
842 浏览

prolog - 序言中的二分法

我写了以下代码:

一切都到这里为止。但是我应该写什么来计算另外两个自然数的除法?例如

0 投票
1 回答
423 浏览

prolog - Prolog,检查Peano算术中的可分性

我需要检查第一个给定的术语(例如s(s(nul))(或 2))是否可以被第二个术语(例如s(nul)(或 1))整除。

我想要做的是将给定术语乘以二,然后检查该术语是否小于或等于另一个术语(如果相等 - 问题已解决)。

到目前为止,我得到了这个:

我似乎无法弄清楚如何将一个术语乘以 2。有什么想法吗?

0 投票
0 回答
103 浏览

prolog - 自然数(1)-> 假。s/1 谓词的问题

我正在使用 swi-prolog。我只是试图遵循“序言的艺术”一书中的例子,但我没有得到正确的结果。恐怕这可能是由于 s/1 谓词。我什至在 swipl 的文档中都找不到 s/1,唯一类似的谓词是 succ/2:http ://www.swi-prolog.org/pldoc/man?predicate=succ/2这可以t 的使用方式与 s/1 相同。我更喜欢使用 s 谓词。

这是判断一个数是否为自然数的程序:

但是, natural_number(1) 例如产生错误。这里有什么问题?

0 投票
1 回答
988 浏览

prolog - Prolog - 一些基本的算术运算实现

我是 Prolog 的新手,需要在不使用内置谓词的情况下对自然数实现一些基本的算术运算。

我用一元表示法表示自然数 Term,这意味着我有常数 0 和递归后继仿函数s [即 4 = s(s(s(s(0))))]。关于上述符号,我实现了算术运算。

规则集是:

现在,当我查询时:

我一切正常:

RES = s(s(s(s(s(s(0))))))。

当我查询时:(想问6/3=?)

我陷入了无限循环并得到了如此

即使我更改了 mult 谓词中递归调用的顺序,它也无济于事:

我在 linux 机器上运行 swi-prolog。

将感谢您的建议!

0 投票
1 回答
368 浏览

prolog - 除了两个输入之外,我如何使用后继功能?

这是两个输入的加法代码(就像我们想要 Z 中的结果,如果 X+1 加 Y 有 Z+1 的结果)。

但我想知道我们可以将类似的代码用于 3 个组件,例如

先感谢您。

0 投票
1 回答
194 浏览

prolog - Prologish Boolos 好奇推理的计算机推理

Boolo 奇怪的推论最初是用这里的方程式制定的。它是函数 f 和谓词 d 的递归定义,通过 N+ 的语法,不为零的自然数,由 1 和 s(.) 生成。

但它也可以用喇叭子句来制定。逻辑内容不完全相同,谓词 f 只捕获函数的积极方面,但问题类型相同。采取以下 Prolog 程序:

最后一个查询的理论逻辑结果是什么,您能否在我们的时间和空间中证明有一个计算机程序可以产生结果,即将程序发布在 gist 上,每个人都可以运行它?

如果执行结果验证工作的程序不是像这里这样的 Prolog 解释器本身,那么特别适合这个 Prologish 问题表述的工作会做什么?

0 投票
1 回答
498 浏览

prolog - 具有后继算术的权力 - 如何防止无限循环?[序言]

我整天都在想这个。我终于承认,我对 Prolog 的理解并没有我想象的那么好。

在一天开始的时候,我在实现一个后继算法时遇到了麻烦,它乘以 2 个 s 数,它的结构是这样的:

我的第一次尝试是这样的:

这有效,但查询mul(X,Y,s(0)) 以无限循环结束。为什么?我已阅读以下帖子:Prolog 后继符号产生不完整的结果和无限循环

我从中了解到:如果我在调用 add 之前调用 mul,并且我在 mul/3 谓词中有变量,这些变量在两个 mul/3 调用中都没有使用,Prolog 会尝试为它未绑定的变量寻找新的可能性。因此它进入了一个无限循环。

为了解决这个问题,我先调用了add:

做到了。然后我尝试实现幂函数,并想“嗯,现在很容易,第一次尝试是:

但是,我必须把 mul 放在第一位,以防止 R 和 Tmp 的左递归。

简单!”男孩,我错了。我不知道如何在不进入无限循环的情况下实现它,即使我把 mul 放在前面。

任何建议都将受到高度赞赏。您可以节省我周六的工作量并提高我的自尊心!先感谢您。

编辑:添加了我缺少的总和谓词:

0 投票
1 回答
1817 浏览

prolog - 后继算术 Prolog Mod 函数

如何在序言中为后继算术(皮亚诺数)编写mod/3函数?