Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

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' ]