Racket 如何在返回多个值的结构中编写guard子句
我试图在球拍中创建一个结构,因为我一直在自学它,并且我一直在尝试为它运行不同的实践问题。现在,我正在尝试创建一个具有以下规范的结构: 名称:Racket 如何在返回多个值的结构中编写guard子句,racket,Racket,我试图在球拍中创建一个结构,因为我一直在自学它,并且我一直在尝试为它运行不同的实践问题。现在,我正在尝试创建一个具有以下规范的结构: 名称:等级 字段: 期中(必须是整数且大于0 final(必须是整数且大于0) 课程(必须为symbol或false) 到目前为止,我写的是 (结构等级(期中期末课程) #:guard(λ(期中期末课程名称) (除非(和(整数?最终值)(>最终值0)) (错误“不是有效的最终成绩”)) (除非(和(整数?中期)(>中期0)) (错误“不是有效的期中成绩”)) (除
等级
字段:
期中
(必须是整数且大于0final
(必须是整数且大于0)课程
(必须为symbol或false)
到目前为止,我写的是
(结构等级(期中期末课程)
#:guard(λ(期中期末课程名称)
(除非(和(整数?最终值)(>最终值0))
(错误“不是有效的最终成绩”))
(除非(和(整数?中期)(>中期0))
(错误“不是有效的期中成绩”))
(除非(或(符号?航向)(假航向))
(错误“不是有效的课程成绩”))
(期中期末课程)
但它是不可实现的。我相信这是因为guard子句返回列表
(期中期末课程)
,但我尝试过的其他实现,其中涉及guard子句返回(期中期末课程)
和just期中期末课程也不起作用。我该怎么做才能让这个guard子句起作用?guard子句的结果必须是n,结构的每个字段一个。请注意,这与列表不同。假设其余逻辑正确,您只需替换”(期中期末课程)(价值观期中期末课程)
。完整结果如下
(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)))
有了这个,我可以做(100级100'球拍101)
,例如。谢谢!我不知道值存在。这太完美了。