list - 序言中列表列表中的最小值

标签 list prolog minimum

你好,我有一个这样的列表:

[[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/

相关文章:

python - python 中奇怪的二维列表行为

Python - 查找列表中第一个空项的索引

python - 字符串列表到字符串子列表

安卓和序言

prolog - 在 SWI-prolog 中定义包含竖线 (|) 的运算符

algorithm - 给定 n 个数字中的最小和最大 10 个数字

c# - 将字典列表转换为类列表

prolog - 序言差异列表

用于验证输入中输入的最少字数的 JavaScript 脚本

java - 提取三个最小值