这是我坚持的家庭作业问题。我必须在不使用显式递归或本地的情况下在 Racket 中创建一个函数,该函数接受一个对列表,其中每对的第一个元素是一个非负整数,并生成一个新的列表列表,其中每个列表是 k每对中第二个元素的出现次数,其中 k 是每对中的第一个元素。例如 (expand-pairs (list (list 1 2) (list 3 4))) 将产生 (list (list 2) (list 4 4 4))
我得到了一些代码,但前提是第二个元素是数字。由于问题没有指定第二个元素是什么类型的元素,我认为它需要适用于任何元素。所以我的函数可以解决上面的例子,但是不能解决(expand-pairs (list (list 1 'a) (list 3 'b)))。
这是我的代码:
(define (expand-pairs plst)
(map
(lambda (x)
(map
(lambda (y) (+ (first (rest x)) y))
(build-list (first x) (lambda (z) (- z z)))))
plst))
我的主要问题是我不知道如何在不使用递归或构建列表的情况下创建长度为 k 的列表,但是如果我使用构建列表,它会创建一个数字列表,我不知道如何转换它到符号列表或任何其他元素。
谁能指出我正确的方向?