我是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初学者!
答案 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 ...