【发布时间】:2019-09-28 15:04:11
【问题描述】:
尽管查看了类似问题的答案,但我无法弄清楚为什么我的代码无法正常工作。我对 Prolog 还太陌生,无法正确命名,但我希望你能看到我想要表达的意思。
我正在根据这个程序大致定义一个时间表,并且正在努力获取 Mike 针对给定结果教授的课程列表(下一步将声明只返回 Mike 和 Phil 教授 2 的结果,但我想解决它,以便我可以看到并理解正在发生的事情)。
我想这应该很简单,但 addToList(List,C) 谓词的任何组合都不起作用。我知道有附加谓词,但我听说它效率低下,并且想学习“原始”方式。我不知道我尝试了多少变化,也无法理解 Prolog 在这方面的工作方式,也不知道我在哪个级别上出错了——这有点像黑匣子之谜使用它。
var program =
:- use_module(library(lists)).
prefers(may,a).
prefers(may,b).
prefers(may,c).
prefers(may,d).
prefers(bob,a).
prefers(bob,b).
prefers(bob,c).
prefers(pete,a).
prefers(pete,b).
prefers(pete,c).
prefers(pete,d).
prefers(tom,a).
prefers(tom,b).
prefers(tom,c).
prefers(tom,d).
teacher_pref(mike,a).
teacher_pref(mike,b).
teacher_pref(mike,c).
teacher_pref(phil,b).
teacher_pref(phil,c).
teacher_pref(phil,d).
addToList([C|List],C):- addToList(List,C).
timetable([a,[C1,S1,T1],b,[C2,S2,T2],c,[C3,S3,T3],d,[C4,S4,T4]],List1):-
teacher_pref(T1,C1),
teacher_pref(T2,C2),
teacher_pref(T3,C3),
teacher_pref(T4,C4),
prefers(S1,C1),
prefers(S2,C2),
S1\\=S2,
prefers(S3,C3),
S1\\=S3,
S2\\=S3,
prefers(S4,C4),
S1\\=S4,
S2\\=S4,
S3\\=S4,
addToList(List1,C):-
teacher_pref(mike,C).
session.consult( program );
session.query('timetable([C1,[a,S1,T1],C2,[b,S2,T2],C3,[c,S3,T3,L3],C4,[d,S4,T4]],List1).')
【问题讨论】:
标签: list prolog accumulator