Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

livescriptを更に闇深く。prelude.lsで関数型の深淵を覗き見る その3:リスト・基本関数編

prelude.ls記事の続き、今回はリストに適用される関数です。
関数型的拡張だと公式で主張しているだけあって、この部分は恐るべき個数……
今回はRubyのEnumerator的挙動を取る関数を取り上げていきます。

実際のところ

prelude.lsのEnumeratorモドキは
Rubyで言う所のブロック渡し……つまり

(:a..:b).map(&:upcase)
#=> [:A, :B]

のような挙動を実現できます。
これに加えて、Rubyでは面倒な引数つきも実行可能です。

each

王道のeachは見た目で安心できる挙動をとります。
ただし引数つきで。

each (.push \boom), [['a'] ['b'] ['c']]
#=> [['a', 'boom'], ['b', 'boom'], ['c', 'boom']]

map

map (.to-upper-case!), ['a', 'b'] #=> ['A', 'B']
map (* 2), [1 to 5]
#=> [2, 4, 6, 8, 10]

reverse

あると何かと便利な逆回しも完備
ただし、これには関数は渡せません。

reverse [ \a to \c]
[ 'c', 'b', 'a' ]