2016-12-06 64 views
3

我在Prolog中是全新的,並且在處理包含其他列表的列表時遇到問題。 我有一些名單如下: [([5],23),([1],23),([2],43),([4],29),([3],14),([5,1,4,3],47)] ,我試圖把(子)與最大長度的列表,並把它先在列表序言:檢查列表中的列表長度

在這個例子中,我希望得到的結果是這樣的: ([5,1,4,3],47),([5],23),([1],23),([2],43),([4],29),([3],14)]

(不關心它是否會從它的起始位置移除)。

感謝所有誰將會盡力幫助

回答

1

。假定您要使用內置的排序例程(我使用SWI-Prolog的爲例這裏),那麼下面將工作:

calcLen((List,K),(N,List,K)):- length(List,N). 
delLen((_,List,K),(List,K)). 

sortlen(List,Sorted):- 
    maplist(calcLen,List,List1), 
    sort(0,@>=,List1, List2), 
    maplist(delLen,List2,Sorted). 

兩個謂詞calcLendelLen插入並刪除列表中對的前面的長度計算 - 使它們成爲三元組。 maplist謂詞將calcLen(和更高版本delLen)應用於列表。