У меня есть несколько фактов, таких как:
motherboard('name', price, 'price range', score).
Мне нужно взять лучшую материнскую плату по количеству очков, поэтому я думаю, что я должен использовать findall, но я не понимаю, как упорядочить по количеству очков (desc order)и возьми первым!Не могли бы вы мне помочь, пожалуйста?
РЕДАКТИРОВАТЬ - @ user27815 решение:
motherboard('Gigabyte B360M Aourus Gaming 3', 86, 'low_range', 3).
motherboard('MSI B350M Mortar', 93, 'low_range', 4).
motherboard('ASUS ROG Strix B350\u002DF', 114, 'middle_range', 6).
motherboard('MSI Z370 Tomahawk', 139, 'middle_range', 7).
motherboard('Gigabyte Aorus AX370 Gaming K7', 169, 'high_range', 8).
setof(Score-Nome,motherboard(Nome, Price,Price_range, Score),Pairs), sort(1,@>,Pairs,Sorted),
write(Pairs),
nl,
write(Sorted).
Результат: [3-Gigabyte B360M Aourus Gaming 3] как для пар, так и для сортировки, он заканчивается с точкой и я могу нажать;чтобы иметь больше решений, почему бы не распечатать их все вместе?И в любом случае порядок одинаков для пар и отсортирован
@ решение PauloMoura - с теми же данными предыдущего решения: setof (Score-Nome, материнская плата (Nome, Price, Price_range, Score), Pairs),последний (Пары, BestMotherboard), напиши (BestMotherboard).
Я получаю это:
?- start.
3-Gigabyte B360M Aourus Gaming 3
true ;
4-MSI B350M Mortar
true ;
6-ASUS ROG Strix B350-F
true ;
7-MSI Z370 Tomahawk
true ;
8-Gigabyte Aorus AX370 Gaming K7
true.