cycle
能產生無限 List 看似無用,但與 zip
搭配卻產生有趣化學反應。
Version
Haskell for Mac 1.8.2
zip
f n aList =
zip groups aList
where groups = cycle [1..n]
f 3 ["aa", "bb", "cc"]
zip
:將傳入 List 與無限 List 合併成 List Pairwhere groups = cycle [1..n]
:使用cycle
建立無限 List
Refactoring
f n aList = zip (cycle [1..n]) aList
省略 groups
直接代入 zip
。
Point-free
f n = zip (cycle [1..n])
左右兩側將 aList
給 Point-free。
Conclusion
- 本例用 ECMAScript 並不容易實現,但由於 Haskell 的
cycle
可建立無限 List,搭配zip
卻出奇簡單