successor-arithmetics相关内容

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

让我们考虑 n=s(s(...s(0)...)) (简单地说 n= s^n(0)).如何编写一个计算两个整数相除的程序?我的意思是 s^(n//m) (这是除法的定义).有任何想法吗?例如,如果我们有这样的问题: ?-除法(s(s(s(s(0)))),s(0),D). 我写了以下代码: nat(0).nat(s(X)) :- nat(X).除法(0,_,D):- D 为 0.除(s(X), ..
发布时间:2022-01-12 10:54:46 其他开发

使用 Prolog 返回整数

我现在试着理解序言.我想给出输入: convert(s(s(s(X))),Y) 输出应该是 Y = 3. convert(s(0), 1).转换(s(s(0)),2).转换(s(X),Y):-转换(X,Y是(Y + 1)). 这些是我现在的规则,但只有输入:convert(s(0), 1).和转换(s(s(0)), 2).工作. 如果我的递归可以正常工作,我就不需要规则:convert( ..
发布时间:2022-01-12 10:50:32 其他开发

如何在所有参数模式的后继算术中实现阶乘序列?

下面的 Prolog 程序定义了一个谓词 fact/2,用于在后续算术中计算整数的阶乘: 事实(0,s(0)).事实(s(X),Y):-事实(X,Z),产品(s(X),Z,Y).产品(0,_,0).产品(s(U),V,W):-总和(V,X,W),产品(V,U,X).总和(0,Y,Y).总和(s(X),Y,s(Z)):-总和(X,Y,Z). 它适用于这种参数模式下的查询: ?- 事实(s(0) ..

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

Peano 算术中的这个小于谓词 less(0, s(_)).更少(s(X),s(Y)):-更少(X,Y). 循环时 ?-less(X, Y), X=s(0), Y=0. 有没有更好的方法来编写 less/2(仅使用 Horn 子句)? 解决方案 你可以使用when/2.使它不再是一个无限枚举的谓词,并且仍然保持 100% 的纯正.when/2 修改SLD-Resolution,一 ..
发布时间:2022-01-12 10:35:38 其他开发

SWI-prolog & 中的自然数递归过程

我对自然数的下一个程序是SWI-prolog: natural_number(0).自然数(s(X)):- 自然数(X). 现在我想做一个递归调用,当我们到达 0 时停止. 我的自然数表示为 - s(0)=0, s(s(0))=1, s(s(s(0)))=2, etc 所以我定义: recommend(A, B, natural_number(0)) :-dosomeFINITE ..
发布时间:2022-01-12 10:28:28 其他开发

后继算术和的最佳绿色削减是什么?

为了了解 Prolog 中的绿色切割,我试图将它们添加到后继算术中 sum 的标准定义中(请参阅 这个查询的 SLD 树是什么?).这个想法是通过消除所有无用的回溯(即,没有 ... ; false)尽可能“清理"输出,同时在所有可能的参数实例化组合下保持相同的行为 - 所有实例化,一/二/三完全未实例化,以及所有变体,包括部分实例化的参数. 这是我在尝试尽可能接近这个理想时能够做到的(我承 ..
发布时间:2022-01-12 10:16:56 其他开发

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

我在教程中遇到了这种逻辑数的自然数评估,这让我有些头疼: natural_number(0).自然数(s(N)):- 自然数(N). 规则大致规定:如果 N 是 0 这是很自然的,如果不是我们尝试将 s/1 的内容发回递归到规则直到内容为0,则为自然数,否则为非自然数. 所以我测试了上面的逻辑实现,心想,如果我想将 s(0) 表示为 1 和 s(s(0)) 为 2,但我希望能够将 s(0 ..
发布时间:2022-01-12 10:04:58 其他开发

s(X)-sum 的更好终止

(让我在期中问题的浪潮中潜入.) 两个自然数之和的常见定义是nat_nat_sum/3: nat_nat_sum(0, N, N).nat_nat_sum(s(M), N, s(O)) :-nat_nat_sum(M, N, O). 严格来说,这个定义太笼统了,因为我们现在也成功了 ?- nat_nat_sum(A, B, unnatural_number). 同样,我们得到以下答案 ..

Prolog 后继符号产生不完整的结果和无限循环

我开始学习 Prolog 并首先了解了后继符号. 这就是我了解如何在 Prolog 中编写 Peano 公理的地方. 请参阅 PDF 的第 12 页: sum(0, M, M).总和(s(N),M,s(K)):-总和(N,M,K).产品(0,M,0).产品(s(N),M,P):-产品(N,M,K),总和(K,M,P). 我将乘法规则放入 Prolog.然后我进行查询: ?- pr ..

Prolog 中的时间、商和余数谓词

我该怎么做. 我需要定义谓词shownumber(X,N),当符号X对应于自然数N时为真.例如,shownumber(s(zero),1) 是真的.好的,现在我有了一个谓词: shownumber(零,0).shownumber(s(N),X):-shownumber(N,Y),X为Y+1. 现在我需要使用 shownumber (X, Y) 谓词来定义: 1) times (X, ..
发布时间:2021-06-22 19:06:35 其他开发

Peano算术中的“less/2"关系

Peano 算术中的这个小于谓词 less(0, s(_)).少(s(X),s(Y)): - 少(X,Y). 何时循环 ?-less(X, Y), X=s(0), Y=0. 是否有更好的方法来编写 less/2(仅使用 Horn 子句)? 解决方案 您可以使用 when/2.使它不再是一个无限枚举的谓词,并且仍然保持 100% 纯净.when/2 修改了 SLD-Resolutio ..
发布时间:2021-06-22 18:46:02 其他开发

Prolog递归过程的说明

如果可能的话,我希望有人解释一下此过程(摘自《立即学习入门》一书).它需要两个数字并将它们加在一起. add(0,Y,Y). add(s(X),Y,s(Z)) :- add(X,Y,Z). 原则上我理解,但是我有一些问题.可以说我发出查询 ?- add(s(s(0)), s(0), R). 这将导致: R = s(s(s(0))). 步骤1是与规则2的匹配.现在X ..
发布时间:2020-07-25 22:35:27 其他开发

s()谓词在Prolog中做什么?

我一直在尝试学习Prolog,并且对谓词s()的功能完全感到困惑. 我看到它经常使用,并且关于Prolog的互联网资源很少,我找不到答案. 例如. /* sum(Is,S) is true if S is the sum of the list of integers Is. */ sum([],0). sum([0|Is],S):-sum( ..
发布时间:2020-07-25 22:34:09 其他开发