这几年一直想寻找一个 FP 语言来练习,期间摸过 Elixir 、Scala、Clojure,但成效一直有限,一直到最近复习 F#,才发现 F# 是一个很简单的 FP 语言,以前看不懂的地方,瞬间都看懂了,只是当年还无法欣赏 F#。

一个语言要能实现 FP,必须有 4 个条件:

简单来说,function 要能如一般变数与 object 一样使用。

但 Pipeline、Compose 与 Currying 在一般 OOP 语言则没有,或者要另外安装其他 package 才能实现,但这些观念在 F# 都是原生支援。

既然已经计算出所有 奇数的平方,接下来就是使用 List.map 计算 +1。

因此我们可以透过 |> 表示先执行 List.flter,然后再将结果传入 List.map,最后再将结果传入 List.map,这样可以很清楚的表示流程,语意比 imperative 写法更清楚。

当 function 参数没有传完全时,F# 将回传一个新的 function,新的 function 只要传入剩下的参数即可,这称为 Currying。

Pipeline 虽然已经够清楚,但 pipeline 基本上仍然是回传 value,若我们能将所有 function 先组合好,最后统一透过一个 function 执行,那就更好了,这就是 Compose。