0

findall述語を使用します

findall(A,getzoo(B,A),MyList)

このリストを返す

A = [[[ant,bear,crab,tortoise,lion],230], [[lion,tiger,bear],560], [[platypus,tiger,snake],3500], [[hippo,giraffe,snail,emu,condor],30], [[bat,robin,hawk,ape,macaw],100]]

リストから分を返す必要があります。Min = [hippo,giraffe,snail,emu,condor],30]

そして、最小述語がストレートリストでうまく機能しています。

minList([H],H).  
minList([H|T],Min):-  minList(T,Next),  (H<Next, Min=H; H>=Next, Min=Next)

.

構造 [[[List],Number],[[List],Number],[[List],Number],...] を解析しようとすると問題が発生し、数値を分離できません。

これが私が探していた答えです。

findVal([[H,Val]|T],Val).
findVal([H|T],Out) :- findVal(T,Out).
4

1 に答える 1

0

リスト項目は 2 要素のリストであるため、それらと統一して変数を 2 番目の要素にバインドするパターンを作成する必要があります。すなわち、

[_, Y]

1 つの要素が 2 番目の要素を取得して呼び出すには、Y.

次に、再帰節 forminListは次のようになります

minList([[X, Y] | T], Min) :-
    minList(T, MinT),
    % now pick apart MinT and compare Y with its right half

また

minList([H | T], Min) :-
    H = [X, Y],
    % proceed as before
于 2012-11-03T19:21:41.317 に答える