scala - "list comprehension"可以被视为 "functional programming"吗?

标签 scala functional-programming list-comprehension

Scala 代码:

for {
   user <- users
   name <- user.names
   letter <- name.letters
} yield letter

我们可以将这种“列表理解”代码视为“函数式编程”风格吗?因为它们将被转换为 mapflatMap 函数?

最佳答案

是的,这绝对是一种函数式技术,特别是假设所有这些成员都是字段或纯函数。它只是 0 个或多个 flatMap 后跟 1 个 map 的语法糖(将 ​​if 子句翻译为 withFilter) 。

如果末尾没有 yield,它的作用更像是命令式 for,转换为 1 个或多个 foreachforeach 通常用于执行语句,因为它们有副作用。

This article更详细地描述了语法,this excellent answer通过一些单子(monad)理论更深入地讨论它,并且 this article明确描述实际规则翻译。

关于scala - "list comprehension"可以被视为 "functional programming"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908501/

相关文章:

haskell - 为什么给 Haskell 添加宏比给 Scheme 更难

scala - 无法在 Spark (Scala) 中的数据帧上执行用户定义的函数

scala - 使用 Scala 中的可变参数

scala - 如何编译Scala Hello World应用程序

python - 在一个语句中对列表理解进行排序

python - 使用列表理解过滤字符串列表

list - 是否值得转换为套装?

构造函数中的Scala最终变量

haskell - 类型签名 a -> b -> a 和 c -> a -> c 之间有区别吗?

generics - F# 静态成员类型约束