-2

わかりました、私はフォームのリストを持っています:

myprg(X)。X = [[a,b,c],[d,e,f],[g,h,i],[j,k,l]].

それはリスト内のサブリストです。

「g」を最初の要素とするサブリストの LAST 要素を表示したい。答えは「私」

4

1 に答える 1

0

恥ずかしがり屋ですが、解決策は次のとおりです。

find_i([_,_,[g,_,i]|_], i).

それは明らかにあなたが与えたケースでうまくいきます。または、具体性を低くすることもできます。

find_i([_,_,[g,_,X]|_], X).

これは、実際にいくつかの検索を行う、わずかに優れたものです。

find_i([[g,_,X]|_], X).
find_i([_|Rest],X) :- find_i(Rest,X).

もちろん、リスト内の項目が 1 つだけであることを前提としています。これは、そうでない別のわずかに優れたものです。

find_i([[g|Rest]|_], X) :- append(_, [X], Rest).
find_i([_|Rest],     X) :- find_i(Rest, X).

gを検索する理由 たぶん、それを独自の変数に引き出す必要があります。

find_i(G, [[G|Rest]|_], X) :- append(_, [X], Rest).
find_i(_, [_|Rest],     X) :- find_i(Rest, X).

これは次のようにクエリしますfind_i(g, [[a,b,c],[d,e,f],[g,h,i],[j,k,l]], X)

より良いアプローチは、サブリストの検索とリストの最後の要素の取得を分離することです。多くの場合、プログラミングでは、物事をこのように構成要素に分解し、それらをきれいに解決するのに役立ちます。このような:

last(L, X) :- append(_, [X], L).

find_by_first(G, [[G|Rest]|_], [G|Rest]).
find_by_first(G, [_|Rest],     Sublist) :- find_by_first(G, Rest, Sublist).

find_i(G, L, X) :- find_by_first(G, L, Sublist), last(Sublist, X).

次回は、あなたの名前と教授の名前、電子メール アドレス、および/または宿題提出 URL を必ず含めてください。宿題を送るのも難しい場合があり、私たちは喜んでお手伝いします。

于 2013-05-01T15:04:13.793 に答える