Prolog 参数未充分实例化(计算列表长度的函数)
Prolog arguments are not sufficiently instantiated (function which calculates list length)
我制作了一个计算列表长度的函数。下面是我的代码。
listLength(LIST) :- solve(LIST, LENGTH), write(LENGTH).
solve([], _).
solve([_|T], LENGTH) :- ADD is LENGTH + 1, solve(T, ADD).
当我运行这段代码输入
?- listLength([1, 2, 3, 4, 5, 6, 7]).
然后,解释器向我显示了错误消息 solve/2 : Arguments are not sufficiently instantiated.
当我修改上面的代码时,如下所示。
listLength(LIST) :- LENGTH is 0, solve(LIST, LENGTH), write(LENGTH).
solve([], _).
solve([_|T], LENGTH) :- ADD is LENGTH + 1, solve(T, ADD).
当我运行这段代码输入相同时,总是0被写入。
我想计算LENGTH,我想使用listLength函数中的变量。
我怎么了? (请注意,我使用的是 swi-prolog。)
第一个错误是在基本情况下。而不是 solve([], _).
你应该写 solve([], 0).
因为如果你不知道空列表的长度你将如何递归地找到更大的列表。
还有一个问题:
solve([_|T], LENGTH) :- ADD is LENGTH + 1, solve(T, ADD).
当尝试计算 ADD 是 LENGTH + 1 时,长度未被实例化计算。您需要更改顺序,例如:
listLength(LIST) :- solve(LIST, LENGTH), write(LENGTH).
solve([], 0).
solve([_|T], LENGTH) :- solve(T, ADD), LENGTH is ADD+ 1.
正在查询:
?- listLength([1, 2, 3, 4, 5, 6, 7]).
7
true.
我制作了一个计算列表长度的函数。下面是我的代码。
listLength(LIST) :- solve(LIST, LENGTH), write(LENGTH).
solve([], _).
solve([_|T], LENGTH) :- ADD is LENGTH + 1, solve(T, ADD).
当我运行这段代码输入
?- listLength([1, 2, 3, 4, 5, 6, 7]).
然后,解释器向我显示了错误消息 solve/2 : Arguments are not sufficiently instantiated.
当我修改上面的代码时,如下所示。
listLength(LIST) :- LENGTH is 0, solve(LIST, LENGTH), write(LENGTH).
solve([], _).
solve([_|T], LENGTH) :- ADD is LENGTH + 1, solve(T, ADD).
当我运行这段代码输入相同时,总是0被写入。
我想计算LENGTH,我想使用listLength函数中的变量。
我怎么了? (请注意,我使用的是 swi-prolog。)
第一个错误是在基本情况下。而不是 solve([], _).
你应该写 solve([], 0).
因为如果你不知道空列表的长度你将如何递归地找到更大的列表。
还有一个问题:
solve([_|T], LENGTH) :- ADD is LENGTH + 1, solve(T, ADD).
当尝试计算 ADD 是 LENGTH + 1 时,长度未被实例化计算。您需要更改顺序,例如:
listLength(LIST) :- solve(LIST, LENGTH), write(LENGTH).
solve([], 0).
solve([_|T], LENGTH) :- solve(T, ADD), LENGTH is ADD+ 1.
正在查询:
?- listLength([1, 2, 3, 4, 5, 6, 7]).
7
true.