1

私はSWI-Prologを使用してPrologで演習を行っており、ネストされたリストを取得して要素のリストに変換し、要素の合計を作成します。2つの別個の述語を作成して、両方の機能を作成しました。

my_flatten(X、[X])->リストを変換します。各リストをその要素で(再帰的に)置き換えることにより、リストを要素として保持している可能性があります。

my_flatten(X,[X]) :- \+ is_list(X).
my_flatten([],[]).
my_flatten([X|Xs],Zs) :-
   my_flatten(X,Y), my_flatten(Xs,Ys), append(Y,Ys,Zs).

addList->リストのすべての要素を追加し、それらの合計を返します

addList([],0).
addList([X|Xs],N):-
   addList(Xs,N0),N is X+N0.

問題自体は、私がPrologの新しいプログラミングであり、同じ述語で両方の述語を結合する方法がわからないため、my_flatternによって返されるリストが述語addListによって使用されることです。少しばかげた質問かもしれませんが、私は何日もそれに固執しています。他の問題についてこの質問を明確にするためにいくつかの助けが必要です

4

1 に答える 1

2

両方を実行する新しい述語を作成するには、共有変数を使用して両方my_flattenと、を呼び出すだけです。addList

addListFlattened(L, Sum) :-
    my_flatten(L, L2),
    addList(L2, Sum).

addListFlattenedは新しい述語(名前は変更できます)であり、を再利用しaddListます。

于 2012-11-27T05:06:07.167 に答える