大家好,我还是新手,我仍然不知道如何用 Prolog 解决这个难题,我做了一些尝试,似乎错误且不完整,这就是问题:
在一次音乐演奏会上,五名学生(约翰、凯特、拉里、玛丽和尼克)演奏了五首音乐作品。巴赫两首,莫扎特两首,维瓦尔第一首。有三位小提琴手和两位钢琴家。每个学生只演奏一首曲子,只演奏一种乐器。找出学生的顺序,他们各自的乐器和作曲家,条件如下:
作曲家没有连续演奏。最后演奏维瓦尔第,先演奏莫扎特。
在两首小提琴曲之间演奏一首钢琴曲,在第一首和最后一首钢琴曲之间演奏两首小提琴曲。
莫扎特没有钢琴曲。
凯特排在第三位。
约翰演奏了莫扎特的一首曲子,紧随其后的是弹钢琴的尼克。
玛丽没有演奏维瓦尔第的作品。
这里是我的half-code
:
List=[
musicians(_,_,_,_),
musicians(_,_,_,_),
musicians(_,_,_,_),
musicians(_,_,_,_),
musicians(_,_,_,_)],
member(musicians(1,_,_,mozart),List) ,
member(musicians(5,_,_,vivaldi),List) ,
member(musicians(_,_,P1,mozart),List) ,P1\==piano,
member(musicians(3,kate,_,_),List) ,
member(musicians(_,john,_,mozart),List) ,
member(musicians(N1,nick,piano,_),List) ,N1==john_num+1,
member(musicians(_,mary,_,C1),List) ,C1\==vivaldi,
- 我不知道如何写关于钢琴和小提琴的#2 语句。
- 我不知道如何在约翰之后写尼克声明
N1==john_num+1,
- 不,我只是坚持使用 Prolog 解决这个问题,即使我已经知道答案,但在 prolog 中是全新的,并且在阅读教程后仍然感到困惑。