我目前只对列表列表进行了递归。
在任何命令式语言中,任务都非常简单:迭代每个教授,迭代教授的课程列表,并获得与作为谓词参数给出的CourseNumber匹配的每个课程,以输出var CourseList。
我有一个简单的解决方案(其他只是失败,没有堆栈或返回空列表),但正如你所看到的,它只会检查课程列表的头部是否与cond匹配。
get_teaching_courses(CourseNumber, CourseList) :-
findall(Course,
(
professor(_, [Course | _]),
member(CourseNumber, Course)
),
CourseList).
教授事实有下一个结构:
professor(Name, [ [CourseName , CourseNumber], .... ]).
我正在考虑对谓词进行谓词,但是我无法实现它(我猜想附加有问题)。
我已经开始学习prolog两天了,如果你能给我任何可以帮助我的帮助,建议或链接,我会很感激。
示例:
assertz(
professor(
'Bob',
[
['Math', 2],
['PE', 3]
]
)
).
解决方案:
get_teaching_courses(CourseNumber, CourseList) :-
findall(CourseName,
(
professor(_, Course),
member([CourseName, CourseNumber], Course)
),
CourseList).
感谢@CapelliC和他的回答。
答案 0 :(得分:1)
问题是在member / 2中应用了错误的模式匹配。试试
member([_,CourseNumber], Course)