内容简介: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
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
"笨办法"学Python
肖 (Zed A.Shaw) / 王巍巍 / 人民邮电出版社 / 2014-11-1 / CNY 49.00
本书是一本Python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。 本书结构非常简单,共包括52个习题,其中26个覆盖了输入/输出、变量和函数三个主题,另外26个覆盖了一些比较高级的话题,如条件判断、循环、类和对象、代码测......一起来看看 《"笨办法"学Python》 这本书的介绍吧!