%Multiply every list Element with his previous Elemennt.
%First Number stays as it is!
% Example list [1,2,3,4,5,6] becomes [1,2,6,12,20,30].
%my solution trying
vormulti1([],[]).
vormulti1([Kopf|Rest], [Neu|Rest2]) :-
Neu is Kopf2 * Kopf,
vormulti1(Rest, Rest2),
Kopf2 is Kopf.
问题是前一个成员。我用Kopf2变量尝试了ist,但是它不起作用,因为它没有在第一个列表元素上实例化。
答案 0 :(得分:1)
您不能使用Kopf2,因为您没有在公式中使用它,所以您无法以您希望的方式将其传递给递归。变量是特定公式的局部变量。您需要通过参数获取其他元素,例如:
vormulti1([],[]).
vormulti1([X],[X]).
vormulti1([X,Y|Z],[X|W]) :- vormulti2(X,[Y|Z],W).
vormulti2(X,[],[]).
vormulti2(X,[Y|Z],[V|W]) :- V is X * Y, vormulti2(Y,Z,W).
另一种可能性是先反转列表(这是一种有效的操作),然后可以更轻松地处理列表的结尾:
vormulti1(X,Y) :- reverse(X,Z), vormulti2(Z,W), reverse(W,Y).
vormulti2([],[]).
vormulti2([Kopf], [Kopf]).
vormulti2([Kopf,Kopf2|Rest], [Neu|Rest2]) :- Neu is Kopf2 * Kopf, vormulti2([Kopf2|Rest], Rest2).
祝你好运。
答案 1 :(得分:0)
vormulti1([],[]).
vormulti1([X|[Y]], [X,Z]):- Z is X*Y,!.
vormulti1([H|[H2|T2]],Z) :-
vormulti1([H2|T2], [_|T3]),!,
Z2 is H2 * H,
append([H,Z2], T3, Z).
vormulti1([X],[X]).