【发布时间】:2020-09-17 11:59:01
【问题描述】:
在我的离散数学课程中,我们有一个序言作业,如下所示
创建一个模拟学生、班级、房间、日期和 他们的关系。包含相关函数
我最初的想法是需要生成大量的数据,我仍然很好奇这个赋值是否可以在不显式映射每个关系的情况下完成。
显然,似乎有两种策略,使用图(似乎很复杂)或使用此映射策略relation(value, value2)(我想将其称为谓词,但我不确定这是否正确)。
但是我似乎无法弄清楚如何访问规则中的关系? (我的意思是 :- 语法,对我来说更像是函数而不是规则)
我觉得自己走错了路,我很难找到解决此问题所需的信息,因为我对术语有困难。
%student(name, class, semester)
student(søren, 101, 1).
student(jens, 101, 1).
student(peter, 101, 2).
student(eskild, 101, 1).
student(jørgen, 101, 2).
student(signe, 101, 1).
student(pernille, 101, 2).
student(katrine, 101, 2).
student(sophie, 101, 1).
student(liva, 101, 1).
%semester_subjects(semester, subject)
semester_subjects(2, DM).
semester_subjects(1, test).
semester_subjects(2, BI).
semester_subjects(1, SI).
semester_subjects(1, LSD).
semester_subjects(2, SI).
semester_subjects(2, LSD).
%class(name, subject)
class(101, DM).
class(101, test).
class(101, SI).
class(101, LSD).
class(101, BI).
%schedule(weekday(0-6), subject)
schedule(0, test).
schedule(1, test).
schedule(1, BI).
schedule(2, SI).
schedule(2, LSD).
schedule(4, DM).
%has_class_today(student_name, day) :-.
%has_sudent(class, student_name) :-.
%has_subject(student_name, subject_name) :-.
我觉得我应该能够做类似的事情
has_class_today(student_name, day) :- {
Class = student(søren).class
Semester = student(søren).semester
SemesterSubjects = semester_subjects.forAll( if(semester == Semester) return subject)
SubjectsToday = schedule(day).forAll(if(SemesterSubjects.includes(subject))
if(SubjectsToday > 0) return true
else return false
}
但我真的不知道该怎么做。总结一下我的问题。
我当前的方法是否应该起作用,我如何才能基于另一个关系(彼得 苏珊)检索一个关系的值? 如果我目前的方法不起作用,您建议如何处理这项任务
【问题讨论】:
-
当您编写
semester_subjects(2, DM).时,您是在说DM是一个变量。如果你想让它成为一个原子,你必须写semester_subjects(2, dm).。
标签: prolog relation relational