gpt4 book ai didi

scheme - SICP中 `flatmap`有什么意义?

转载 作者:行者123 更新时间:2023-12-01 11:24:15 24 4
gpt4 key购买 nike

(define (accumulate op initial sequence) 
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))

(define (flatmap proc seq)
(accumulate append nil (map proc seq)))

以上是 SICP 的代码片段,在 Scheme 中。为什么需要 flatmap 过程? flatmapmap 有什么区别?

最佳答案

(map proc seq) 将对序列 seq 应用 proc,为每个元素返回一个值。每个这样的值都可能是另一个序列。

(accumulate append nil seq) 将使用 appendseq 中元素的所有副本连接到一个新列表中。

因此,flatmap 会将 proc 应用于 seq 的所有元素,并生成一个新的扁平化列表所有的结果。从概念上讲,这也是其他语言(Java、Scala 等)中 mapflatmap 的区别,因为 map 生成一个每个元素的值,而 flatmap 可能产生多个或没有(感谢 Chris)。

例如,在 Clojure 中:

(map #(clojure.string/split  % #"\s+") ["two birds" "with one stone"])
;; => (["two" "birds"] ["with" "one" "stone"])

(mapcat #(clojure.string/split % #"\s+") ["two birds" "with one stone"])
;; => ("two" "birds" "with" "one" "stone")

关于scheme - SICP中 `flatmap`有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38993348/

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