Пролог: создание списка с помощью findall с использованием пользовательского ввода
Итак, моя проблема заключается в следующем:
Я должен создать список, используя команды findall / bagof / setof.
Вот мой файл данных:
musico('R. Stevie Moore').
musico('Lane Steinberg').
musico('Yukio Yung').
musico('Jessie Evans').
musico('Bettina Koster').
musico('Lucia Pamela').
musico('Shooby Taylor').
musico('Tiny Tim').
musico('Bettina Koster').
musico('The Legendary Stardust Cowboy').
album('R. Stevie Moore', 'Manuscription').
album('Lane Steinberg', 'Manuscription').
album('R. Stevie Moore', 'The Yung & Moore Show').
album('Yukio Yung', 'The Yung & Moore Show').
album('Jessie Evans', 'Autonervous').
album('Bettina Koster', 'Autonervous').
album('Lucia Pamela', 'Walking on the moon').
album('Shooby Taylor', 'The Human Horn').
album('Tiny Tim', 'God Bless Tiny Tim').
album('The Legendary Stardust Cowboy', 'Rock-It to Stardom').
formato('Rock-It to Stardom',vinil).
formato('Walking on the Moon',vinil).
formato('God Bless Tiny Tim',cd).
formato('Walking on the Moon',cd).
formato('Autonervous',cd).
formato('Manuscription',cd).
formato('The Human Horn',cassete).
formato('The Yung & Moore Show',cassete).
formato('Walking on the Moon',mp3).
Я должен создать список, содержащий всех музыкантов (musicos), которые связаны с каждым альбомом.
Что я, хотя было это:
all_musicians_album([Z]) :-
write('Write the name of the album : '),
read(Y),
findall(X, album(X,Y), Z).
Идея заключалась в том, чтобы использовать альбом пользовательского ввода в альбоме (X,Y), чтобы он только находил и добавлял в список музыкантов, связанных с этим альбомом.
Это принесло 2 проблемы, которые я не могу решить:
- Не работает, функция добавляет всех музыкантов в список.
- Он работает только для одного альбома при каждом вызове функции. Возможно ли сделать это в одной функции? Как сохранить альбом и музыкантов в списке, чем добавить эти списки в один список? Или я должен использовать bagof вместо findall?
Спасибо за помощь.