深入淺出 F# 之 Partial Function Application

栏目: ASP.NET · 发布时间: 7年前

内容简介:FP 既然強調 Higher Order Function,就會希望 argument 以 function 傳入,因此就會有 function 能夠傳回 function 的需求,除了回傳 Anonymous Function 或 Lambda Expression 外,F# 更提供了 Partial Function Application ,讓程式碼更優雅。macOS High Sierra 10.13.3.NET Core SDK 2.1.101

FP 既然強調 Higher Order Function,就會希望 argument 以 function 傳入,因此就會有 function 能夠傳回 function 的需求,除了回傳 Anonymous Function 或 Lambda Expression 外,F# 更提供了 Partial Function Application ,讓程式碼更優雅。

Version

macOS High Sierra 10.13.3

.NET Core SDK 2.1.101

JetBrains Rider 2017.3.1

F# 4.1

Lambda Expression

舉一個最簡單的例子

[1..5]
|> List.iter (fun i -> printfn "%d" i)

15List 全部印出來。

深入淺出 F# 之 Partial Function Application

List.iter() 的 argument 要求 'T -> unit 的 function。

在沒有提供 Partial Function Application 的程式語言,我們會傳進 Anonymous function 或 Lambda Expression。

fun i -> printfn "%d" i

這種寫法中規中矩,儘管語法不太一樣,在一般語言都看得到。

Partial Function Application

[1..5]
|> List.iter (printfn "%d")

既然 List.iter() 的 argument 要求 'T -> unit 的 function,我們只要能產生 T -> unit 就符合 List.iter() 的需求。

printfn() 的 singnature 為 string -> 'T -> unit ,他的意思是:

  • 當傳入兩個參數為 string'T 時,回傳值為 unit
  • 當傳入一個 參數為 string 時,回傳值回 T -> unit

List.iter() 要的正是 'T -> unit ,所以我們只要傳入一個參數即可。

printfn "%d"

這種寫法是不是比 Lambda Expression 更優雅呢?

Summary

  • 在多參數的 function,只要提供 部分參數 ,就會回傳一個新的 function,而不必自己建立 Anonymous Function 或 Lambda Expression。
  • 在多參數的 function,其型別是以 -> 隔開,如 string -> 'T -> unit ,而不是 string, 'T -> unit ,因為 F# 的 function 可隨時提供 部分參數 ,而回傳新的 function,如只提供 string ,就會回傳 'T -> unit ,這也是為什麼 F# 在每個參數間以 -> 隔開,而非 ,

Conclusion

  • Partial Function Application 並不是 F# 的獨門絕技,只要是 FP 語言都會有,算是 FP 語言的基本要求,但在一般語言如 C#、JavaScript 卻看不到,只能使用 Lambda Expression / Anonymous Function / Arrow Function 來處理,但 Partial Function Application 提供了更優雅的方式

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法精解

算法精解

Kyle Loudon / 肖翔、陈舸 / 机械工业出版社 / 2012-8 / 79.00元

本书是数据结构和算法领域的经典之作,十余年来,畅销不衰!全书共分为三部分:第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础;第二部分对链表、栈、队列、集合、哈希表、堆、图等常用数据结构进行了深入阐述;第三部分对排序、搜索数值计算、数据压缩、数据加密、图算法、几何算法......一起来看看 《算法精解》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码