Prolog参数没有充分实例化,R是[H | R1]
我读过一些问题,它们是相同的问题,但代码不同,不幸的是,另一个问题正在发布 我遵循我的教授的笔记,对我的insert语句进行建模,与这里看到的阶乘函数相同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],
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 很好的观察,但这不是错误的原因,它只会产生一个变量列表。。。