我一直在向自己教球,我正在尝试在球拍中创建一个结构,并且一直在尝试解决不同的练习问题。现在,我正在尝试创建具有以下规范的结构:
名称:
grade
栏位:
midterm
(必须为整数且大于0
final
(必须为整数且大于0)
course
(必须为symbol或false)
到目前为止我写的是这个
(struct grade (midterm final course)
#:guard (λ (midterm final course name)
(unless (and (integer? final) (> final 0))
(error "not a valid final grade"))
(unless (and (integer? midterm) (> midterm 0))
(error "not a valid midterm grade"))
(unless (or (symbol? course) (false? course))
(error "not a valid course grade"))
'(midterm final course)))
但这是无法实现的。我相信,因为guard子句返回list '(midterm final course)
,但是我尝试了其他实现,其中涉及到guard子句返回(midterm final course)
,但midterm final course
也无法正常工作。我该怎么做才能使该保护条款起作用?
guard子句的结果必须为n values
,对于该结构的每个字段一个。请注意,这与列表不同。假设逻辑的其余部分是正确的,你只需要更换'(midterm final course)
同(values midterm final course)
。完整的结果如下。
(struct grade (midterm final course)
#:guard (λ (midterm final course name)
(unless (and (integer? final) (> final 0))
(error "not a valid final grade"))
(unless (and (integer? midterm) (> midterm 0))
(error "not a valid midterm grade"))
(unless (or (symbol? course) (false? course))
(error "not a valid course grade"))
(values midterm final course)))
有了这个,我就能做到(grade 100 100 'racket101)
,例如。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句