我试图定义一个规则来将自然数转换为整数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
应该是什么。我该如何解决这个问题?