gpt4 book ai didi

list - 简单的序言程序。出现错误: >/2: Arguments are not sufficiently instantiated

转载 作者:行者123 更新时间:2023-12-04 02:56:41 25 4
gpt4 key购买 nike

我制作了一个Prolog谓词posAt(List1,P,List2),用于测试PList1List2位置上的元素是否相等:

posAt([X|Z], 1, [Y|W]) :-
X = Y.
posAt([Z|X], K, [W|Y]) :-
K > 1,
Kr is K - 1,
posAt(X, Kr, Y).

测试时:
?- posAt([1,2,3], X, [a,2,b]).

我期望得到 X = 2的输出,但是却收到以下错误:

ERROR: >/2: Arguments are not sufficiently instantiated



为什么会出现此错误?

最佳答案

Prolog谓词是参数与语句之间的关系

the element at position P of List1 and List2 are equal



显然是可以使用多种解决方案的示例。
?- posAt([1,2,3],X,[1,5,3,7]).
X = 1.

因此,来自sharky的答案在清楚地解释了为什么会出现技术错误的同时,需要进行一些小的更正:
posAt([X0|_], Pos, Pos, [X1|_]) :-
X0 == X1.

现在它可以按预期工作了。
?- posAt([1,2,3],X,[1,5,3,7]).
X = 1 ;
X = 3 ;
false.

编写简单的谓词进行列表处理是一种非常有值(value)的学徒实践,也是有效学习该语言的主要方式。如果您也想研究可用的库谓词,那么这里是使用library( lists)中的nth1/3的版本
posAt(L0, P, L1) :-
nth1(P, L0, E),
nth1(P, L1, E).

输出:
?- posAt([1,2,3],X,[1,5,3,7]).
X = 1 ;
X = 3.

尝试理解为什么在这种情况下SWI-Prolog“顶级”解释器能够推断解决方案的确定性可能会很有趣。

关于list - 简单的序言程序。出现错误: >/2: Arguments are not sufficiently instantiated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9780067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com