深入淺出 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 提供了更優雅的方式

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

查看所有标签

猜你喜欢:

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

The Art of Computer Programming, Volumes 1-3 Boxed Set

The Art of Computer Programming, Volumes 1-3 Boxed Set

Donald E. Knuth / Addison-Wesley Professional / 1998-10-15 / USD 199.99

This multivolume work is widely recognized as the definitive description of classical computer science. The first three volumes have for decades been an invaluable resource in programming theory and p......一起来看看 《The Art of Computer Programming, Volumes 1-3 Boxed Set》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具