sig Student, Tutor, Mark {}
sig Course {
reg : set Student,
alloc : Student -> Tutor,
result : Student -> Mark
} 我希望能够将课程c作为输入;输出一组导师,他们负责一个或多个注册到c的学生,他们还没有分数。
有谁能帮帮我吗?
发布于 2013-03-11 09:36:24
这一次,你似乎是在问如何在合金中编写集合理解。然后,您可以使用集合理解来编写一个函数,该函数针对给定的课程返回所有注册了该课程的学生,这样他们就不会被分配分数。在此之后,很容易直接从alloc关系中选择分配给这些学生的导师。
合金中集合理解的语法如下所示
{x: expr | condition(x)}它的意思是“选择属于set x的所有expr,使condition(x)保持”。
以下是如何为您的问题编写以下代码:
sig Student, Tutor, Mark {}
sig Course {
reg: set Student,
alloc: Student -> Tutor,
result: Student -> Mark
}
fun studentsWithNoMarks[c: Course]: set Student {
{s: c.reg | no c.result[s]}
}
fun tutorsForStudentsWithNoMarks[c: Course]: set Tutor {
c.alloc[studentsWithNoMarks[c]]
} https://stackoverflow.com/questions/15328207
复制相似问题