【发布时间】:2015-02-09 09:28:55
【问题描述】:
我是Tasked (in exercise 8),正在用中级学生语言(Racket)创建一个函数,该函数接收一个数字列表和一个数字列表;每个列表的长度相同。命名第一个列表断点和第二个 LoR(行列表)。此函数应使用 map 定义,并应过滤 LoR 中的每一行,以便只有大于 LoR 中第 n 行的数字才包含大于断点中第 n 值的值——为了清楚起见,这是一个示例:
(define breakpoints (list 7 2 15))
(define LoR (list (list 3 25 13)
(list 1 2 11)
(list 22 4 8)))
会输出...
(list (list 25 13) (list 11) (list 22))
在不使用地图的情况下执行此操作会很好,我理解这个意义上的问题,但我无法弄清楚如何使用地图。从某种意义上说,我在递归地思考,如果行列表不为空,我会将(过滤的第一行)转换为(使用其余断点和 LoR 的函数的递归调用),如下所示:
(define (parallel-filter breakpoints LoR)
(cond((empty? breakpoints) empty)
(else (cons ...
(parallel-filter (rest breakpoints) (rest LoR))))))
但是,我不确定如何用可以使函数正常工作的 map 语句替换椭圆 - 据我了解,map 的第一个参数必须是单参数函数,我不知道如何为此目的使用地图。我该如何进行?
编辑以正确输出
【问题讨论】:
-
我认为练习的重点是使用高阶函数(
map、filter、foldr等)所以你不应该使用显式递归来解决它
标签: racket racket-student-languages