我正在尝试创建一个序言谓词来解决这个斑马问题,但是它会无限期地运行并且不会产生结果,我该如何解决这个问题。
这是斑马问题:
世界五大DJ将在电子音乐节上表演,每一个 一个在特定阶段。他们并排等待玩耍。找出他们的国籍、爱好和他们玩的类型。
DJ属性:
球衣颜色:黑色、蓝色、绿色、红色、白色
国籍:美国、加拿大、荷兰、法国、苏格兰
音乐类型:鼓和贝司、dubstep、EDM、house、trance
演出舞台:世外桃源、仙宫、香格里拉、瓦尔哈拉、西巴尔巴
年龄:25、30、35、40、45
爱好:露营、杂耍、绘画、唱歌、冲浪
线索
Scott 在身穿白色衬衫的 DJ 左侧某处。
第四位是要在Arcadia上演奏的DJ 阶段。
30岁的DJ第一位
放EDM的DJ就在加拿大人的右边
喜欢绘画的人在玩Dubstep的DJ旁边
身穿黑色衬衫的 DJ 介于 Scott 和 Dubstep 播放器,按此顺序。
法国DJ在身穿蓝色衬衫的旁边。
其中一端是喜欢Camping的DJ
即将在仙宫舞台上表演的DJ穿着蓝色 衬衫。
喜欢画画的介于穿绿色的DJ之间 和穿着蓝色的 DJ,按顺序排列。
第五位是打鼓和贝司的DJ
中间是要上仙宫舞台的DJ
弹Trance的在弹Dubstep的旁边
喜欢杂耍的DJ正好在左边的加拿大人
爱好唱歌的DJ就在DJ的右边 穿着黑色衬衫。
三十多岁的DJ旁边是玩杂耍的DJ
第四位是40岁的DJ
这位40岁的DJ介于荷兰人和最年轻的DJ之间,在那 订单。
穿蓝色衣服的 DJ 在要播放的 DJ 的左边某处 西巴尔巴舞台
喜欢冲浪的人要去英灵殿舞台上玩
穿红色衬衫的 DJ 在法国人右边的某个地方
到目前为止,这是我的代码:
member(X, [X|_]).
member(X, [_|T]) :- member(X, T).
left_of(A, B, L) :- append(_, [A|T], L), member(B, T).
next_to(A, B, L) :- left_of(A, B, L) ; left_of(B, A, L).
solve(DJs) :-
DJs = [_, _, _, _, _],
% Clue 1
member([scott, _, _, _, _, _], DJs),
member([_, white, _, _, _, _], DJs),
left_of([scott, _, _, _, _, _], [_, white, _, _, _, _], DJs),
% Clue 2
DJs = [_, _, _, [_, _, _, arcadia, _, _], _],
% Clue 3
DJs = [[_, _, _, _, 30, _], _, _, _, _],
% Clue 4
member([canadian, _, _, _, _, _], DJs),
member([_, _, edm, _, _, _], DJs),
left_of([canadian, _, _, _, _, _], [_, _, edm, _, _, _], DJs),
% Clue 5
next_to([_, _, _, _, _, painting], [_, _, dubstep, _, _, _], DJs),
% Clue 6
left_of([scott, _, _, _, _, _], [_, black, _, _, _, _], DJs),
left_of([_, black, _, _, _, _], [_, _, dubstep, _, _, _], DJs),
% Clue 7
next_to([french, _, _, _, _, _], [_, blue, _, _, _, _], DJs),
% Clue 8
(DJs = [[_, _, _, _, _, camping], _, _, _, _] ; DJs = [_, _, _, _, [_, _, _, _, _, camping]]),
% Clue 9
member([_, blue, _, asgard, _, _], DJs),
% Clue 10
left_of([_, green, _, _, _, _], [_, _, _, _, _, painting], DJs),
left_of([_, _, _, _, _, painting], [_, blue, _, _, _, _], DJs),
% Clue 11
DJs = [_, _, _, [_, _, _, _, 40, _], _],
% Clue 12
next_to([_, _, trance, _, _, _], [_, _, dubstep, _, _, _], DJs),
% Clue 13
left_of([canadian, _, _, _, _, _], [_, _, _, _, _, juggling], DJs),
% Clue 14
left_of([_, black, _, _, _, _], [_, _, _, _, _, singing], DJs),
% Clue 15
next_to([_, _, _, _, 35, _], [_, _, _, _, _, juggling], DJs),
% Clue 16
left_of([dutch, _, _, _, _, _], [_, _, _, _, 25, _], DJs),
left_of([_, _, _, _, 25, _], [_, _, _, _, 40, _], DJs),
% Clue 17
left_of([_, blue, _, _, _, _], [_, _, _, xibalba, _, _], DJs),
% Clue 18
member([_, _, _, valhalla, _, surfing],DJs),
% Clue 19
member([_, red, _, _, _, _], DJs),
left_of([french, _, _, _, _, _], [_, red, _, _, _, _], DJs),
% Check properties
member([american, _, _, _, _, _], DJs),
member([canadian, _, _, _, _, _], DJs),
member([dutch, _, _, _, _, _], DJs),
member([french, _, _, _, _, _], DJs),
member([scottish, _, _, _, _, _], DJs),
member([_, black, _, _, _, _], DJs),
member([_, blue, _, _, _, _], DJs),
member([_, green, _, _, _, _], DJs),
member([_, red, _, _, _, _], DJs),
member([_, white, _, _, _, _], DJs),
member([_, _, drum_and_bass, _, _, _], DJs),
member([_, _, dubstep, _, _, _], DJs),
member([_, _, edm, _, _, _], DJs),
member([_, _, house, _, _, _], DJs),
member([_, _, trance, _, _, _], DJs),
member([_, _, _, arcadia, _, _], DJs),
member([_, _, _, asgard, _, _], DJs),
member([_, _, _, shangri_la, _, _], DJs),
member([_, _, _, valhalla, _, _], DJs),
member([_, _, _, xibalba, _, _], DJs),
member([_, _, _, _, 25, _], DJs),
member([_, _, _, _, 30, _], DJs),
member([_, _, _, _, 35, _], DJs),
member([_, _, _, _, 40, _], DJs),
member([_, _, _, _, 45, _], DJs),
member([_, _, _, _, _, camping], DJs),
member([_, _, _, _, _, juggling], DJs),
member([_, _, _, _, _, painting], DJs),
member([_, _, _, _, _, singing], DJs),
member([_, _, _, _, _, surfing], DJs).