ようちゃんのブログ

ようちゃんのブログはこちらです!

RubyKaigi: Non-Linear Pattern Matching against Unfree Data Types in Ruby (Egison Pattern Matching in Ruby)

Satoshi Egi

Egisonというパターンマッチ言語を作っている。RubyからもつかえるようにGemつくった。

無限リストのパターンマッチもできる
-> 双子素数のリストもパターンマッチできる

Qiita でも炎上した
http://qiita.com/egisatoshi/items/38f7f8aef32ac67ccd4b

パターンマッチの例

match(self) do
with(User.(_name, _, _, _, true)) {"Hello Prof. #{name}"}
with(User.(_name, _, _, true, _)) {"Hello Dr. #{name}"}
end

みたいな感じで書ける。
ホントはもっと長いソースだったけど、途中で断念

コンビネーション関数の例

ループをネストして書かなければならない例も1行で書ける

Non-Linear Pattern Matching

_a, __("a + 1"), __("a + 2"), *_

みたいにかくと[1,2,3]みたいのを取り出せる

トランプのストレート・フラッシュのパターンも書ける

このへんであーなるほどって思った。確かにトランプゲームなどのルールや戦略を記述するにはよいと思った

お気に入りは双子素数

match_stream(Prime) {
wth(List.(...))
}

prime_twins.take(10)

みたいな感じで...の中に双子素数のパターンを書いておくと、最初から10組の双子素数を返す

Egison Gemも作ったらか使ってみください。

** Egisonについて
人間の直感にあった言語が必要だ
パターンマッチ志向というパラダイムを提唱しています。

麻雀の上がり判定をEgisonで書きました。


Not the usual suspects: 10 plucky programming languages on the rise | InfoWorld

Mind Map on Programming Language

Programming Language

  • Mathmatical Abstraction
    • Function Modularity
      • Lexical Scoping
      • Higth Orderd Function
  • Type System
    • Type Check
    • Type Interface
  • Pattern Matching
    • Non-linear Pattern
  • Computer Abstraction
    • Memory Operation
    • Distributed Computing
  • Human Understandablity
    • Friendly Syntax

Pattern Matchingでやりたいのは

  • パターンマッチのモジュール化とか
  • レキシカルスコープをもつパターンマッチ言語

SQLに変わるクエリ言語
twitterのUserグラフのクエリをSQLよりも簡潔に書ける

PR
CodeIQでEgisonの記事書きます
問題も出題します。

質疑

A: はやさはどう?

Q: あんまり考えていない。たぶん早い

A: デバッグが大変かと思う。ツールはない?

Q: 僕は大変だと思わないです。
ループで書くよりわかりやすい

A: 簡単?

Q:

  • 友達は3時間で分かった
  • 楽天では合計20時間くらいで
  • Lispとかそういう言事同じくらい

ちょっとだけ感想

パターンマッチ志向というのは面白い考えだなと思った。けど、SQLと比較しちゃうと速度がきになるところ。
表現はSQLよりは柔軟そうなので表現の自由度と速度のトレードオフになりそう。両立できれば例えばNoSQLのデータストアのクエリとか応用はありそう。