我使用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,即Min = [hippo,giraffe,snail,emu,condor],30]
我的min谓词在直接列表中运行良好。
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 :(得分: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