2012-06-05 5 views
1

У меня есть этот список в Прологе:Сортировка подсписок пролог

[[13, Audi A3,11.11.2011,75000, Berlina, ауди, 12100 верде Горох, [4wd], +3,0000133333333334], [11, santafe, 11.11.2011.80000, fuoristrada, audi, 2232232, verde pisello, [Metalizzata, Sedile in Pelle, 4wd], 7.0000125]] |

Я хочу, чтобы отсортировать этот список для последнего значения подсписка как пример я хочу иметь этот результат:

[[11, Santafe, 11.11.2011,80000, fuoristrada, ауди, 2232232, верде Горох, [Metalizzata, Sedile в Pelle, 4wd], 7,0000125], [13, Audi A3,11.11.2011,75000, Berlina, ауди, 12100, верде Горох, [4wd], 3,0000133333333334]]

+0

Вы должны сделать свой вопрос более абстрактным, например, использовать список: [[а, [б] , 1], [p, [q], 3]] – Ihmahr

ответ

1

predsort это твой друг. Тогда-то легко, но продать Audi verde pisello будет оставаться очень, очень трудно ...

sort_on_last(List, Sorted) :- 
    predsort(compare_last, List, Sorted). 

compare_last(R, X, Y) :- 
    last(X, Xl), 
    last(Y, Yl), 
    compare(R, Xl, Yl). 

Чтобы попробовать:

test :- sort_on_last(
     [[11,santafe,'11.11.2011',80000,fuoristrada,audi,2232232,'verde pisello',['Metalizzata','Sedile in Pelle','4wd'],7.0000125], 
     [13,'Audi A3','11.11.2011',75000,berlina,audi,12100,'verde pisello',['4wd'],3.0000133333333334] 
     ], S), 
    maplist(writeln, S). 
?- test. 
[13,Audi A3,11.11.2011,75000,berlina,audi,12100,verde pisello,[4wd],3.0000133333333334] 
[11,santafe,11.11.2011,80000,fuoristrada,audi,2232232,verde pisello,[Metalizzata,Sedile in Pelle,4wd],7.0000125] 
true. 

Особенность predsort/3: он действует как своего рода/2, таким образом удалить дубликатов. Чтобы избежать этой проблемы, compare_last/3 можно изменить, избегая возвращения =, таким образом:

compare_last(R, X, Y) :- 
    last(X, Xl), 
    last(Y, Yl), 
    (Xl < Yl -> R = (<) ; R = (>)). 
+0

hehheh, хотя у меня нет только 2 подсписок. Я хочу сортировать по последнему значению каждого подсписника [[13, Audi A3,11.11.2011,75000, berlina, audi, 12100, verde pisello, [4wd], 3.0296266666666667], [15, Fiat Punto JTD, 10.1.2007, 201000, berlina, fiat, 4000, verde pisello, [], 1.0110547263681593], [16, Peugeot 106,1.3.1998,230000, городской автомобиль, peugeot, 1700, nero lucido, [], 0.009660869565217391], [18, Tata safari, 10.1.1989, 110000, fuoristrada, tata, 2000, verde oliva, [4wd], 0.0202], [11, santafe, 11.11.2011.80000, fuoristrada, hynaday, 14000, verde pisello, [Metalizzata, Sedile in Pelle, 4wd ], 5.027775] –

+1

Это будет прекрасно работать с 'predsort'. –

+0

да, но я не буду в порядке возрастания –

Смежные вопросы