调用prolog中函数中的函数



我是prolog的新手,目前遇到的情况是:我已经声明了几个函数

 a(Jahr, Z) :- Z is Jahr mod 19. 
 b(Jahr, Z) :- Z is Jahr mod 4. 
 c(Jahr, Z) :- Z is Jahr mod 7. 
 h1(Jahr, Z) :- Z is Jahr div 100. 
 h2(Jahr, Z) :- Z is Jahr div 400. 

所有这些功能都起作用。我现在尝试了这个:

 n(Jahr, Z) :- Z is h1(Jahr, Y) - h2(Jahr, X).  

但它给了我一个例外

错误:is/2:参数没有充分实例化

我试着用谷歌搜索和研究这个问题,但我想,由于我仍在进行的学习过程,我还找不到一个可以理解的答案,所以我只在这里问。

感谢你帮助一个入门入门!

您的规则应该看起来像

n(Jahr, Z) :- h1(Jahr, H1), h2(Jahr, H2), Z is H1 - H2.

也就是为计算所需的每个值引入一个变量(这里是一个简单的减法)。

或者,一些Prolog(特别是SWI-Prolog)提供了一种通过算术函数扩展算术子语言的方法。然后你应该申报

?- [user].
:- arithmetic_function(h1/1).
:- arithmetic_function(h2/1).
h1(Jahr, Z) :- Z is Jahr div 100. 
h2(Jahr, Z) :- Z is Jahr div 400. 

之后你可以使用这样的功能:

?- A = 2013, Z is h1(A) - h2(A).
A = 2013,
Z = 15.

请注意,不赞成使用算术函数。。。

最新更新