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

Prolog参数没有充分实例化,R是[H | R1],prolog,arguments,instantiation-error,Prolog,Arguments,Instantiation Error,我读过一些问题,它们是相同的问题,但代码不同,不幸的是,另一个问题正在发布 我遵循我的教授的笔记,对我的insert语句进行建模,与这里看到的阶乘函数相同 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],

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

我遵循我的教授的笔记,对我的insert语句进行建模,与这里看到的阶乘函数相同

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将变量R与列表[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中被视为变量的bc

很好的观察,但这不是错误的原因,它只会产生一个变量列表。。。