gpt4 book ai didi

list - 创建重复元素列表的列表

转载 作者:行者123 更新时间:2023-12-04 02:44:40 27 4
gpt4 key购买 nike

这是一道我被卡住的作业题。我必须在不使用显式递归或本地的情况下在 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 的列表,但是如果我使用构建列表,它会创建一个数字列表,我不知道如何将其转换为符号列表或任何其他元素。

谁能指出我正确的方向?

最佳答案

这是另一种可能的实现,建立在@RomanPekar 的回答之上,但对 Racket 来说更符合习惯:

(define (expand-pairs lst)
(map (lambda (s)
(build-list (first s) (const (second s))))
lst))

它利用了高阶过程map , constbuild-list在不使用显式递归或 local 的情况下创建实现。这里的技巧是理解以下表达式如何返回 x5 副本:

(build-list 5 (const  'x))
^ ^ ^
#copies constant element

=> '(x x x x x)

关于list - 创建重复元素列表的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19080389/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com