2015-10-06 3 views
1

У меня есть следующая проблема: я должен заказать список, содержащий только строки в алфавитном порядке, используя только «bagof», «findall», «setoff», я не допущен к использованию каких-либо сортировка алгоритма сортировки.Пролог: упорядочивание списка по алфавиту

Вот содержание документа .pl, которому я должен составить список.

musico('R. Stevie Moore'). 
musico('Lane Steinberg'). 
musico('Yukio Yung'). 
musico('Jessie Evans'). 
musico('Miguel'). 
musico('Lucia Pamela'). 
musico('Shooby Taylor'). 
musico('Tiny Tim'). 
musico('The Legendary Stardust Cowboy'). 

Вот что я до сих пор:

all_musicians([Z]) :- 
    findall(X, musico(X), Z). 

Это делает список, содержащий все музыканты, но теперь я не могу показаться, чтобы понять, как заказать.

+1

Имейте в виду, что 'setof' является' bagof' + 'sort'. Но почему вы не прочитали документацию 'setof' и' bagof'? –

ответ

2

setof/3 - это то, что вы хотите, так как оно производит отсортированный список результатов.

all_musicians(Z) :- 
    setof(X, musico(X), Z). 
+0

Может ли setof использоваться для сортировки всех типов списков, содержащих только один вид переменных? Что делать, если List содержит несколько типов переменных? – eXistanCe

+0

@eXistanCe Просто прочитайте документацию, в частности, как сортируется сортировка/сортировка и что означает «стандартный порядок терминов». –

+1

@eXistanCe да, 'setof/3' или' sort/2' могут сортировать все типы элементов списка. Вы должны прочитать документацию, которая объясняет правила для [Стандартного порядка условий] (http://www.swi-prolog.org/pldoc/man?section=standardorder). – lurker

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