List 序言:使用用户输入用findall创建列表

List 序言:使用用户输入用findall创建列表,list,prolog,user-input,prolog-findall,List,Prolog,User Input,Prolog 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'). musi

所以我的问题是:

我必须使用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).
我必须创建一个列表,其中包含与每个专辑相关联的所有音乐家(Musico)

我当时的想法是:

all_musicians_album([Z]) :-
    write('Write the name of the album : '),
    read(Y),
    findall(X, album(X,Y), Z).
其想法是在相册(X,Y)上使用用户输入相册,这样它将只查找与该相册相关联的音乐家并将其添加到列表中

这带来了两个我似乎无法解决的问题:

  • 它不起作用,该函数将所有音乐家添加到列表中
  • 每次调用该函数时,它仅适用于一个唱片集。是否可以在单个函数中执行此操作?像将专辑和音乐家保存在列表中,而不是将这些列表添加到单个列表中?或者我应该用bagof而不是findall

  • 谢谢您的帮助。

    在提示下,您是否将相册名称用单引号括起来,并以点结尾?那很可能你打错名字了。Prolog是关系型的。我会避免使用复杂的文本作为键。最好引入ID列并加入…也许您可以展示一个具体的示例,说明您尝试了什么(输入)以及如何输入?在提示下,是否将唱片集的名称用单引号括起来,并以点结尾?那很可能你打错名字了。Prolog是关系型的。我会避免使用复杂的文本作为键。最好介绍ID列和联接…也许您可以展示一个具体的示例,说明您尝试了什么(输入)以及如何进行?