2012-11-03 54 views
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). 

回答

0

由於您的列表項是兩元素列表,所以您必須編寫一個與這些列表項一致的模式,並將變量綁定到第二個元素。即,

[_, Y] 

爲單個元素檢索其第二個元素並將其稱爲Y

然後,minList遞歸條款將成爲

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 
+0

感謝提模式。 – Kickaha