gpt4 book ai didi

scheme - 如何在 Racket 中使用附加贴图(方案)

转载 作者:行者123 更新时间:2023-12-04 13:28:02 24 4
gpt4 key购买 nike

我不完全了解append-map命令在 Racket 中的作用,也不了解如何使用它,而且我很难在网上找到一些相当容易理解的文档。有人可能会演示该命令的确切功能以及其工作方式吗?

最佳答案

在将过程应用于每个子列表之后,append-map过程对于在子列表列表中创建单个列表很有用。换句话说,此代码:

(append-map proc lst)

...在语义上与此等效:
(apply append (map proc lst))

... 或这个:
(append* (map proc lst))

有时,将“添加到子列表列表”成语称为“扁平化子列表”。让我们看一些示例,这个示例对文档中的 here来说是正确的:
(append-map vector->list '(#(1) #(2 3) #(4)))
'(1 2 3 4)

对于更有趣的示例,请查看Rosetta Code中的 code,以查找列表的所有排列:
(define (insert l n e)
(if (= 0 n)
(cons e l)
(cons (car l)
(insert (cdr l) (- n 1) e))))

(define (seq start end)
(if (= start end)
(list end)
(cons start (seq (+ start 1) end))))

(define (permute l)
(if (null? l)
'(())
(apply append (map (lambda (p)
(map (lambda (n)
(insert p n (car l)))
(seq 0 (length p))))
(permute (cdr l))))))

使用 append-map可以更简洁地表达最后一个过程:
(define (permute l)
(if (null? l)
'(())
(append-map (lambda (p)
(map (lambda (n)
(insert p n (car l)))
(seq 0 (length p))))
(permute (cdr l)))))

无论哪种方式,结果都是预期的:
(permute '(1 2 3))
=> '((1 2 3) (2 1 3) (2 3 1) (1 3 2) (3 1 2) (3 2 1))

关于scheme - 如何在 Racket 中使用附加贴图(方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14617095/

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