c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開發中です。

RubyのEnumeratorを条件分岐してみる。Unix pipeを拡張する一案

Unixにはパイプといふものがある。プログラムには「標準入力」と「標準出力」といふものがあり、標準入力からなにかを受け取れば、それに基づいて標準出力になにかを表示することにする。その標準入力は、なにか別のプログラムの標準出力からやってくる。標準出力は、なにか別のプログラムの標準入力へゆく。かうしてプログラムを繋いでゆくことができる。
しかもイベント駆動である。実際には標準入力からはpull、標準出力へはpushなので、イベント駆動ではないが、標準入力からpullしやうとしてプログラムは、そこで停止し、標準入力がやってくれば (前のプログラムが標準出力へ書き出せば) 動き始める、といふ動作ができる。
このパイプを多次元にするのは難しい。実質的な成功例は無いとおもふ。 .on('〜', () => {}).on('〜', () => {}) とイベント駆動で書いてやれば、同等になるが、醜い。Unixシェルでは一時ファイルを作ってやって、行を分けてコマンドを書いてゆけば用を成すが、それはパイプではないし、醜い。
RubyではEnumeratorといふのがある。map (collect) やreduce (inject) をメソッドチェーンで書いてゆくものだ。これはパイプであり、便利だ。そしてEnumeratorは分岐できない。.each{|item| if 〜 then some(item); else other(item); end }とeachの中で分岐を書くことに成る。
ここにegison-rubyといふものがある。その構文を真似れば、少しは分岐できさうな気がしてきた。

some_collection.case do
  with パターン do |e|
    e.each { }
  end
  with パターン do |e|
    e.each { }
  end
  else_ do |e|
    e.each { }
  end
end

といふ構文だ。書いてみる。


https://gist.github.com/ne-sachirou/7b90e19fb3c8d9ada703

Lazy Enumeratorではきちんとlazyな動作をする。
構文しか真似てなくてEgisonには申し訳ない。そして醜い。たとへば分岐をまったく合流できない。
在りし日のCaty Scriptの文献を読みにゆかねばならない。