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

Prolog Arguments are not sufficiently instantiated, R is [H|R1]

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

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

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],我希望从我的 insertPos/4 中检索 R1 并将头部附加到它上面。

我的查询是:

?- 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).

您正在使用 A B C,它们在 prolog 中被视为变量。