我是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.
请注意,不赞成使用算术函数。。。