我有一个包含学生群体的结构年份。学生是另一种结构
(DEFSTRUCT student
(fname "nil" :type string)
(lname "nil" :type string)
(initGroup 0 :type integer)
(options nil)
(marks nil)
(newGroup nil)
)
马克是一个结构
(DEFSTRUCT mark
(avgy1 0.0 :type single-float)
(avgy22 0.0 :type single-float)
(avgy33 0.0 :type single-float)
(finalAvg 0.0 :type single-float)
)
我希望通过我的年度结构访问这个结构的finalAvg字段,因为我想要按照我一年中的所有学生排序。
我尝试了很多组合,但似乎没有任何效果。有什么建议吗?
答案 0 :(得分:3)
这样的事情:
(setf (year-students *year-2013*)
(sort (year-students *year-2013*)
'>
:key (lambda (student)
(loop for mark in (student-marks student)
maximize (mark-finalavg mark)))))
样式备注:
finalAvg
这样的CamelCase。使用final-avg
或类似内容。答案 1 :(得分:2)
Rainer's answer已经确定了这一点,但我只想添加以下内容:要注意的核心是您可以对其他访问器的结果使用访问器。例如,如果变量jim
持有学生,则以下内容将为您提供他的第一个平面标记(假设marks
是mark
结构的列表):
(final-avg (first (marks jim)))
它可能用像Python这样的语言编写:
jim.marks[0].final-avg