深入淺出 F# 之 Partial Function Application

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

内容简介: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 提供了更優雅的方式

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

查看所有标签

猜你喜欢:

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

Concepts, Techniques, and Models of Computer Programming

Concepts, Techniques, and Models of Computer Programming

Peter Van Roy、Seif Haridi / The MIT Press / 2004-2-20 / USD 78.00

This innovative text presents computer programming as a unified discipline in a way that is both practical and scientifically sound. The book focuses on techniques of lasting value and explains them p......一起来看看 《Concepts, Techniques, and Models of Computer Programming》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

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

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具