Prolog 参数未充分实例化,R 为 [H|R1]

标签 prolog arguments instantiation-error

我读过一些问题,这些问题是相同的问题,但代码不同,遗憾的是另一个问题正在发布。

我正在遵循教授的笔记,并对插入语句进行建模,使其与此处所示的阶乘函数相同。

factorial(0, 1).
factorial(N, F) :-  
   N > 0,
   N1 is N – 1,
   factorial(N1, F1),
   F is N * F1.

我的插入函数是

insertPos(V, 0, [H|T], [V|[H|T]]).
insertPos(V, N, [H|T], R) :-
   N > 0, 
   N1 is N-1,
   insertPos(V, N1, T, R1),
   R is [H|R1].

R 上抛出的错误是 [H|R1],我希望从我的 检索 R1 insertPos/4 并将头部附加到其上。

我的查询是:

?- insertPos(D, 1, [A,B,C], L).

最佳答案

您不能使用 is/2 将变量 Rlist 统一 [H |R1]is/2 用于算术表达式求值

相反,您可以通过编写以下内容来使用统一运算符 =/2:

R = [H|R1]

或者通过参数的模式匹配:

insertPos(V, N, [H|T], [H|R1]) :-
   N > 0, 
   N1 is N-1,
   insertPos(V, N1, T, R1).

关于Prolog 参数未充分实例化,R 为 [H|R1],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47060539/

相关文章:

error-handling - 参数在序言中没有充分实例化

prolog - 根据一个值找到列表内列表的最小值

python - 提取 python 方法参数的数量和名称

序言错误 : is/2: Arguments are not sufficiently instantiated

java - 通过 System.out.println();作为方法中的参数

arguments - 将参数列表中的类型实例传递到函数声明中(动态环境捕获)

Prolog - 参数未充分实例化

Prolog、predicate返回正确结果,但也有错误?

lambda - 为什么在使用具有 lambda 和波浪号项的 Maplist 时会出现无限循环?

prolog - different/2-是否存在纯粹的确定性定义?