點燈坊

失くすものさえない今が強くなるチャンスよ

使用 zip 與 cycle 合併成 List Pair

Sam Xiao's Avatar 2021-07-03

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 Pair
  • where groups = cycle [1..n]:使用 cycle 建立無限 List

zip000

Refactoring

f n aList = zip (cycle [1..n]) aList

省略 groups 直接代入 zip

zip001

Point-free

f n = zip (cycle [1..n]) 

左右兩側將 aList 給 Point-free。

zip002

Conclusion

  • 本例用 ECMAScript 並不容易實現,但由於 Haskell 的 cycle 可建立無限 List,搭配 zip 卻出奇簡單