List 排序症状表prolog
我有一个动态列表,其中包含一些具有确定值的症状 ES:List 排序症状表prolog,list,prolog,List,Prolog,我有一个动态列表,其中包含一些具有确定值的症状 ES:[症状(a,0.93)、症状(b,0.56)、症状(c,0.59)、症状(d,0.80)] 我想根据确定性的值按降序排列列表 ES:[症状(a,0.93)、症状(d,0.80)、症状(c,0.59)、症状(b,0.56)] 谁能帮我?谢谢您使用的是哪种prolog环境?SWI_Prolog有一个谓词,它可以使用自定义谓词对列表重新排序。最快的方法通常是将列表映射到另一个列表,并使用键排序/2对其排序。在这里,我假设您也希望对名称进行排序,前提
[症状(a,0.93)、症状(b,0.56)、症状(c,0.59)、症状(d,0.80)]
我想根据确定性的值按降序排列列表
ES:[症状(a,0.93)、症状(d,0.80)、症状(c,0.59)、症状(b,0.56)]
谁能帮我?谢谢您使用的是哪种prolog环境?SWI_Prolog有一个谓词,它可以使用自定义谓词对列表重新排序。最快的方法通常是将列表映射到另一个列表,并使用
键排序/2对其排序。在这里,我假设您也希望对名称进行排序,前提是它们具有相同的值
element_to_pair(E, k(NegV,N) - E) :-
E = symptom(N,V),
NegV is -V.
nigrosort(Xs, Ys) :-
maplist(element_to_pair,Xs, Ks),
keysort(Ks, Ls),
pairs_values(Ls, Ys).
像这个元素对/2
这样的小谓词通常不应该有自己的名称。太多了,记不住了。使用,您可以写得更简洁:
:- use_module(library(lambda)).
nigrosort(Xs, Ys) :-
maplist(\E^(k(NegV,N)-E)^( E = symptom(N,V), NegV is -V ),Xs, Ks),
keysort(Ks, Ls),
pairs_values(Ls,Ys).
…,预排序(比较症状,L,有序)。。。
比较症状(PB)。
比较症状(>,,)。
请注意,我们必须避免返回相等,否则系统将以相同的概率删除症状。如果使用ECLiPSe,可以使用排序/4
谓词,该谓词允许指定用于排序的术语参数:
sort(2, >=, Symptoms, OrderedSymptoms)
sort(2, >=, Symptoms, OrderedSymptoms)