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
来统一变量 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).
您正在使用 A B C,它们在 prolog 中被视为变量。
我读过一些问题,它们是相同的问题但代码不同,遗憾的是另一个问题正在发布。
我正在按照教授的笔记对我的插入语句进行建模,使其与此处所见的阶乘函数相同。
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
和 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).
您正在使用 A B C,它们在 prolog 中被视为变量。