2

プロローグがリストでどのように機能するか理解できません。指定されたリストに末尾を追加して新しいリストを返す関数を作成しようとしています。しかし、私の実装は機能せず、修正方法がわかりません。ここに私が持っているものがあります:

% add_tail(L,M,E) :- L is M with [E] appended.
% I wanna do this without using the append predicate

add_tail([E],[],E).
add_tail(List, [H|T], E):-
    add_tail(List1, T, E),
    List is [H|List1].

この関数が何をしたいのかを明確にするために、出力の例を次に示します。

?- add_tail(L,[1,2,3],4).
L = [1,2,3,4].
4

1 に答える 1

1

これをチェックしてください:

append([X|Y],Z,[X|W]) :- append(Y,Z,W).
append([],X,X).

2 行目 ( append([],X,X)) は、空のリストに要素を追加することはX、その要素自体と等しいこと (ブレーク条件) を単純に示しています。最初の行はZ、リスト[X|Y]( Xis head, rest Y) に追加すると新しい listが生成されると述べていますが、 は に追加した結果です。[X|W]WZY

?- append([1,2,3],[4],L).
L = [1,2,3,4]

あなたの場合、パラメータを並べ替えるだけです!

于 2013-04-27T14:54:46.813 に答える