如何修复这种递归乘法?

问题描述我是逻辑编程和PROLOG的新手。以下PROLOG程序定义了一个谓词mul/3,用于将第一个参数与第二个参数相乘,从而产生第三个参数,该谓词的基础是等效于(x−1)*y+y=z:mul(0,_,0).mul(X,Y,Z):-ground(X),succ(U,X),add(

发布:2023-01-03 标签:recursionterminationmultiplicationprologfailure-slice


如何实现所有参数模式的列表项删除?

问题描述下面的Prolog程序定义了一个谓词deleted/3,用于从传入的第二个参数的列表中删除传入第一个参数的项目的所有匹配项,并生成传入的第三个参数的列表:deleted(_,[],[]).deleted(X,[X|Y],Z):-deleted(X,Y,Z).deleted

发布:2022-10-16 标签:terminationsequenceprologlogical-purityfailure-slice


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

问题描述下面的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,

发布:2022-10-16 标签:terminationprologfactorialfailure-slicesuccessor-arithmetics


在 Prolog 中解析表达式并返回抽象语法

问题描述我必须编写parse(Tkns,T),它以记号列表的形式接受数学表达式并找到T,并返回表示抽象语法的语句,尊重操作顺序和关联性.例如,?-parse([num(3),plus,num(2),star,num(1)],T).T=加(整数(3),乘(整数(2),整数(1)))

发布:2022-10-16 标签:parsingprologdcgfailure-slice


在第一次解决斐波那契对后防止回溯

问题描述当F是第N个斐波那契数时,术语fib(N,F)为真.以下Prolog代码通常对我有用::-use_module(library(clpfd)).纤维(0,0).纤维(1,1).纤维(N,F):-N#>1、N#=<F+1,F#>=N-1,F#>0,N1#=N-1,N2#=N

发布:2022-10-16 标签:backtrackingfibonacciprologclpfdfailure-slice


Prolog 谓词 - 无限循环

问题描述我需要使用自然数为2的幂创建一个Prolog谓词.自然数有:0、s(0)、s(s(0))等等……IneedtocreateaPrologpredicateforpowerof2,withthenaturalnumbers.Naturalnumbersare:0,s(0),

发布:2022-10-16 标签:exponentiationprologfailure-slicesuccessor-arithmeticsnon-termination


Prolog从尾部找到列表中的最大整数

问题描述我需要从列表的头部或尾部找到列表中的最大整数.我已经编写了一个可以从头部找到最大的程序,现在我需要一些帮助才能从尾部开始.这是我目前所拥有的:最大([X],X).最大([X|Xs],X):-最大(Xs,Y),X>=Y.最大([X|Xs],N):-最大(Xs,N),N>X.

发布:2022-10-16 标签:listtail-recursionprologfailure-slice


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

发布:2022-10-16 标签:terminationprologfailure-slicesuccessor-arithmetics


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),总

发布:2022-10-16 标签:infinite-loopprologfailure-slicesuccessor-arithmeticsnon-termination


为什么在定义转换两个原子关系的谓词时会出现堆栈限制超出错误?

问题描述我想知道为什么在这些情况下程序会无限递归:Iwanttoknowwhydoestheprogramgoesinaninfiniterecursioninthosecases:?-love(kay,amanda).和?-love(rob,amanda).这是代码:love(

发布:2022-10-16 标签:prologtransitive-closurefailure-slicenon-termination