我正在学习Prolog,我正在尝试编写一个谓词newhead/3
,它只是将第二个参数附加到代表列表的第一个参数。
因此newhead([1,2],3,R)
应该产生R = [3,1,2].
我写了以下内容,我对此错误消息的内容以及为什么我的代码逻辑看起来不正确感到困惑。
newhead([H|T],E,R) :-
L is [H|T],
R is [E|L].
或者:
newhead(L,E,R) :-
R is [E|L].
也行不通。这似乎应该是一个非常简单的操作,但我不相信它可能需要递归。
我感谢任何帮助。
答案 0 :(得分:4)
您可以简单地写一下:
new_head(Tail, Head, [Head| Tail]).
答案 1 :(得分:2)
您可以使用谓词'append / 3'。
apped([3],[1,2],R).
R = [3,1,2]
或
append([X],[1,2],R), X=3.
R = [3,1,2]
答案 2 :(得分:2)
我相信你已经找到了答案:)但我也想解释一下我的答案。
我的理解:第一个参数是列表,目标是列表的第二个参数头。
这是代码:
new([],F,[F]). % if your list is empty.
new([X|XS],F,[F,X|XS]):-
new(XS,F,YS).
输出:
?- new([2,3],1,R).
R = [1, 2, 3].
?- new([],1,R).
R = [1].
?- new([2,3],[1],R).
R = [[1], 2, 3].