我读过一些问题,这些问题是相同的问题,但代码不同,遗憾的是另一个问题正在发布。
我正在遵循教授的笔记,并对插入语句进行建模,使其与此处所示的阶乘函数相同。
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
将变量 R
与 list
统一 [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/