-1

リスト L があり、各要素を個別のリストに分割し、それらを再度追加する必要があります。これは私が同じために作ったコードです。

split([],[]).
split([H|T],Ls):-split(T,Ls),splist(H,[]).
make(Val,[H1|List],[H1|Res]):- make(Val,List,Res). make(Val, List,[Val|List]).
splist(H,L2):- make(Sum,[],L1),append(L1,L2,NewL).

このコードを使用すると、L の各要素が split() から splist() に再帰的に渡され、make() によって単一要素のリスト L1 になります。L1 と L2 を連結し続けるには追加が必要です。しかし、そうではありません

たとえば、私は L=[1,2,3] を持っています。ここで、次のプロセスを実行する必要があります。

H=1、L1=[1]、L2=[1]。次に、H=2、L1=[2]、L2=[1,2]。次に、H=3、L1=[3]、L2=[1,2,3]。

上記の出力が必要ですが、これが私のコードです。

H=1、L1=[1]、L2=[1]。次にH=2、L1=[2]、L2=[2]。次に、H=3、L1=[3]、L2=[3]。

4

1 に答える 1

1

あなたのコードからは何の意味もありません。make定義が不完全です。そのままでは何もせず、失敗します。

Yourはwithsplitと同等です。つまり、入力 list の各要素に対して逆方向に、失敗するかどうかを確認しようとします - 引数が固定されているため、それが唯一の結果です - and .split(X,[]):- reverse(X,R), maplist(spl([]),R).spl(B,A):-splist(A,B).splist(H,[])HXH[]

述語splitに名前を付けるのsplistは非常に悪い考えです。私たち人間は単語を最初から区別するように配線されており、これらの名前の唯一の異なる文字は、はるかに終わり近くに隠されています。IOW 2 つの名前は非常によく似ており、読み間違えたり、タイプミスしたりしやすいです。

最後に、 for splist(H,L2):- make(Sum,[],L1),append(L1,L2,NewL).makecn のみが失敗するため、 も失敗しますsplist。しかし、何もないmakeところから何かを生み出したとしても、インスタンス化されていない心から始めて、それは何を言っているのL1でしょうか? リストに追加できることは?何も言っていないと言って、任意のリストを他のリストに追加できます。SumL2L1

?? :)

于 2013-05-09T06:15:58.140 に答える