Types 从定义的类型中筛选出字段值(长度未知的列表)
我定义了这种类型的图像:Types 从定义的类型中筛选出字段值(长度未知的列表),types,filter,racket,Types,Filter,Racket,我定义了这种类型的图像: (define-type Example [E1(salary number?)] [E2(salary number?) (age number?)] [E3(salary number?) (name string?)] [E4(random number?)]) 现在我得到了一个包含特定示例类型的列表,如 (define e1(E1 4)) (define e2(E2 3000 25)) (define e3(E3 2000 "anton"))
(define-type Example
[E1(salary number?)]
[E2(salary number?) (age number?)]
[E3(salary number?) (name string?)]
[E4(random number?)])
现在我得到了一个包含特定示例类型的列表,如
(define e1(E1 4))
(define e2(E2 3000 25))
(define e3(E3 2000 "anton"))
(list e1 e2 e3)
我想计算列表中所有工资的总和
我的方法是筛选薪资字段,然后映射该字段。但我不知道如何筛选一个场地,我在谷歌上搜索了这么多,但似乎都找不到,在球拍指南中也找不到。
因此,用一段代码来回答这个问题是值得赞赏的,但更值得赞赏的是,我可以找到解决这个问题的方法。可以用来过滤每种类型的工资
[type case]像cond一样进行调度,将case expr的结果按顺序与所有变量匹配。第一次成功匹配将触发对匹配的body expr的求值,其值是整个类型case表达式的结果
例如,以下工资函数从通用示例类型e中提取工资:
然后,总薪资成为每个列表元素薪资的递归总和:
(define (sum-salaries lst)
(if (null? lst) 0 (+ (salary (car lst))
(sum-salaries (cdr lst)))))
使用上述示例,工资总额为:
(sum-salaries (list e1 e2 e3))
==> 5004
谢谢!您在哪里找到[type case]定义的?它位于上面提供的链接中。看见
(define (sum-salaries lst)
(if (null? lst) 0 (+ (salary (car lst))
(sum-salaries (cdr lst)))))
(sum-salaries (list e1 e2 e3))
==> 5004