为什么我不能在SWI-Prolog中声明以下规则?

时间:2017-02-19 18:18:44

标签: prolog

我试图定义一个规则来将自然数转换为整数as follows

?- assert(nat_to_int(0, 0)).
true.

?- assert(nat_to_int(s(X), Y):- nat_to_int(X, Z), Y is Z + 1).
ERROR: Uninstantiated argument expected, found _5706 is _5712+1 (2-nd argument)
ERROR: In:
ERROR:    [8] assert((nat_to_int(...,_5772):-nat_to_int(_5776,_5778)),_5782 is _5788+1)
ERROR:    [7] <user>

我理解Z必须先实例化,然后才能在表达式Y is Z + 1中使用它。但是,我不明白为什么它不会被实例化。没有nat(X, Z)实例化Z

我认为问题是X本身可能无法实例化。因此,它无法弄清Z应该是什么。我该如何解决这个问题?

0 个答案:

没有答案