你好,我有一个这样的列表:
[[3,[a,b,c,d]],[2,[a,b,d]],[5,[d,e,f]]]
列表列表... 我想找到内部列表中的最小数量 在这种情况下我想返回 D=2 和 L=[a,b,d]
我尝试了这段代码:
minway([[N|L]],N,L).
minway([[M|L1]|L2],D,_):- M<D, minway(L2,M,L1).
minway([[M|_]|L2],D,L):- M>=D, minway(L2,D,L).
但我收到错误:
</2: Arguments are not sufficiently instantiated
Exception: (8) minway([[3,[a,b,c,d]],[2,[a,b,d]],[5,[d,e,f]]], _G7777, _G7778) ?
creep
对于这个运行句子:
minway([[3,[a,b,c,d]],[2,[a,b,d]],[5,[d,e,f]]],D,L).
结果需要是:
D=2.
L=[a,b,d].
我的问题出在哪里? 以及如何修复它?
交易很多
最佳答案
首先,切换到更好的数据表示形式:使用 Key-Value
代替 [Key,Value]
!
然后,定义minway_/3
基于
iwhen/2
,
ground/1
,
keysort/2
, 和
member/2
,像这样:
minway_(Lss, N, Ls) :-
iwhen(ground(Lss), (keysort(Lss,Ess), Ess = [N-_|_], member(N-Ls, Ess))).
使用 SICStus Prolog 4.5.0 的示例查询:
| ?- minway_([3-[a,b,c,d],2-[a,b,d],5-[d,e,f],2-[x,t,y]], N, Ls).
N = 2, Ls = [a,b,d] ? ;
N = 2, Ls = [x,t,y] ? ;
no
关于list - 序言中列表列表中的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34699220/