Prolog 不知道如何在序言中统一这一点

Prolog 不知道如何在序言中统一这一点,prolog,Prolog,嗨,如果我有下一个知识基地 natural(0). natural(suc(X)):-natural(X). sum(0,N,N). sum(suc(N),suc(N),R). mult(N,1,N). mult(number,times,result):-mult(number,times-1,partial), sum(partial,number,result). 我问这个问题?mult5,3,15 prolog是如何运行的???首先,我将数字实例化为5,将次数实例化为3,将5实例化为结

嗨,如果我有下一个知识基地

natural(0).
natural(suc(X)):-natural(X).
sum(0,N,N).
sum(suc(N),suc(N),R).
mult(N,1,N).
mult(number,times,result):-mult(number,times-1,partial), sum(partial,number,result).
我问这个问题?mult5,3,15


prolog是如何运行的???首先,我将数字实例化为5,将次数实例化为3,将5实例化为结果。在它与查询头统一后,如何处理子句主体,特别是偏取什么值?-trace,mult5,3,15。您应该决定是使用0,suc0,sucsuc0,…,还是使用0,1,2,3。。。。混用它们并不能解决你的问题。您还应该弄清楚为什么使用times-1作为参数也不起作用。继续,谷歌prolog peano。“真的,就这么做吧!”鲍里斯说得对——将自然数定义为一个继承数的整个意义不在于逻辑模式匹配,所以你一定要尽可能多地使用它。例如,使用suc0而不是1,以及在mult head中使用suctimes,以便在递归调用中仅使用times而不是times-1。也许您会发现我自己的实现行22和31很有用-我希望您正确处理外语-@petrbel Yes,我想说的是,即使是最肤浅的研究也会告诉OP一切我们需要做的事情。我之所以没有投票结束这个问题,而是给出了一些建议,唯一的原因是似乎有一些诚实的尝试,试图找到自己的解决方案,尽管这些解决方案缺乏信息和误导。