在prolog中调用函数中的函数

时间:2013-11-23 15:22:11

标签: function 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).  

但它给了我一个例外

  

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

我试图谷歌并研究这个问题但是,我想因为我仍然在进行学习过程,我找不到一个可以理解的答案,所以我只是问这里。

感谢您帮助prolog初学者!

1 个答案:

答案 0 :(得分:1)

你的规则应该是

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

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

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

?- [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.

请注意,不推荐使用arithmetic_function ...