内容简介: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)
將 1
到 5
的 List
全部印出來。
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 提供了更優雅的方式
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【1】JavaScript 基础深入——数据类型深入理解与总结
- 深入理解 Java 函数式编程,第 5 部分: 深入解析 Monad
- 深入理解 HTTPS
- 深入理解 HTTPS
- 深入浅出Disruptor
- 深入了解 JSONP
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据压缩导论(第4版)
[美] Khalid Sayood / 贾洪峰 / 人民邮电出版社 / 2014-1 / 129.00
数据压缩已经成为信息革命的一门支撑技术,这场革命已经改变了我们的生活,而在此过程中,数据压缩也变得几乎无处不在。从MP3播放器到智能手机,再到数字电视和数字电影,数据压缩几乎成了所有信息技术的必备要素。 近年来,以大数据为标志的互联网技术高歌猛进。数据规模大、产生速度快、来源多样等特性,导致数据存储和处理都前所未有地复杂。《数据压缩导论(第4版)》作为迄今为止数据压缩领域最全面而深入的著作,......一起来看看 《数据压缩导论(第4版)》 这本书的介绍吧!
图片转BASE64编码
在线图片转Base64编码工具
HEX HSV 转换工具
HEX HSV 互换工具