【发布时间】:2017-06-28 15:57:39
【问题描述】:
我正在编写一个简单的代码,生成一个包含 5 个数字的简单列表,其第一个变量应该是正数,我试图理解为什么这段代码会失败
test([H|T]) :- H > 0, length(T,4).
当我打电话时
length(X,5), test(X).
它显示以下错误:
错误:参数没有充分实例化
当我调试代码时,test 中的 H 变量没有被实例化。
有人知道为什么吗?
【问题讨论】:
-
它怎么知道它应该是一个数字?
-
尝试查询
length(X, 5).。 -
length(X, 5)给你一个......嗯......长度为 5 的列表,但其元素尚不清楚。所以它们是可变的。length/2不会生成实际的元素。 -
您收到实例化错误的原因与
H > 0给您的原因相同。 -
换句话说,在 Prolog 提示符下尝试查询
H > 0.。H没有被实例化,因为 you 还没有将它实例化为任何东西。但是,如果你这样做,例如H = 3, H > 0.,或H is 1 + 2, H > 0.,然后它工作。另见stackoverflow.com/tags/instantiation-error/info。
标签: list prolog instantiation-error