2

我已经阅读了一些相同的问题但代码不同的问题,遗憾的是正在发布另一个问题。

我正在关注我的教授笔记并将我的插入语句建模与他们的阶乘函数相同,如此处所示。

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

2 回答 2

4

不能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).
于 2017-11-01T17:44:45.733 回答
0

您正在使用被视为 prolog 中的变量的 ABC。

于 2017-11-01T17:49:54.393 回答