所以我的问题如下:
我必须使用 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).
我必须创建一个列表,其中包含与每张专辑相关的所有音乐家(音乐家)。
我虽然是这样的:
all_musicians_album([Z]) :-
write('Write the name of the album : '),
read(Y),
findall(X, album(X,Y), Z).
这个想法是在专辑(X,Y)上使用用户输入专辑,以便它只会找到与该专辑关联的音乐家并将其添加到列表中。
这带来了两个我似乎无法解决的问题:
- 它不起作用,该功能将所有音乐家添加到列表中。
- 每次调用该函数时它仅适用于一张专辑。是否可以在单个函数中执行此操作?就像将专辑和音乐家保存在一个列表中,而不是将这些列表添加到一个列表中?或者我应该使用 bagof 而不是 findall?
谢谢您的帮助。