sortBy
也是代表性 Higher Order Function,可自行傳入 Comparator Function 明確指定該如何比較與排序。
Version
Haskell for Mac 1.8.2
sort
import Data.List
f = sort
books = [
("FP in JavaScript", 100),
("Elm in Action", 200),
("Speaking JavaScript", 300)
]
f books
books
為 list 內放 tuple,若要對 books
排序,首先需 import Data.List
,然後才能使用 sort
。
Haskell 的 tuple 使用
()
不過 sort
預設只對 tuple 第一個 element 做排序,若想對第二個 element 做排序,則必須改用 sortBy
。
sortBy
import Data.List
price book1 book2 =
let
price1 = snd book1
price2 = snd book2
in
if price1 > price2
then GT
else if price1 < price2
then LT
else EQ
f = sortBy price
books = [
("FP in JavaScript", 100),
("Elm in Action", 200),
("Speaking JavaScript", 300)
]
f books
第 3 行
price book1 book2 =
let
price1 = snd book1
price2 = snd book2
in
if price1 > price2
then GT
else if price1 < price2
then LT
else EQ
定義 price
comparator function,需提供兩個 argument,先在 in
使用 snd
取得 tutple 的第二個 element。
- 若
price1 > price2
則回傳值GT
,相當於greater than
- 若
price1 < price2
則回傳值LT
,相當於less than
- 否則回傳值
EQ
,相當於equal
14 行
f = sortBy price
將 price
傳給 sortBy
以 Point-free 形式組合 f
。
Conclusion
- Haskell 的
sortBy
與 Ramda 的sort
觀念類似,需自行提供 comparator function