■
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
- Function Modularity
- 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: あんまり考えていない。たぶん早い
Q: 僕は大変だと思わないです。
ループで書くよりわかりやすい
A: 簡単?
Q: