Egison Pattern Matching 
in Ruby 
- Express Intuition Directly with 
Essentially New Syntax - 
Vol.01 Sep/18/2014 
Satoshi Egi 
Rakuten Institute of Technology 
http://rit.rakuten.co.jp/
2 
Self-Introduction 
Name 
Satoshi Egi (江木 聡志) 
Association 
Rakuten Institute of Technology (楽天技術研究所) 
Education 
Majored Computer Science in the University of 
Tokyo 
Interests 
Programming Languages, AI (Mathematics) 
Website 
http://www.egison.org/~egi/
3 
Very Quick Introduction of Today’s Contents 
I have created the programming language that 
realized non-linear pattern-matching even 
against data that have no standard form. 
Non-linear patterns allow multiple occurrences of same variables 
in a pattern 
Enumerate the elements of 
the collection ‘xs’ that appear 
more than twice 
(match-all xs (multiset integer)! 
[<cons $x <cons ,x _>> x])! 
Egison 
pairs = []! 
(1..n).each do |i|! 
(i..n).each do |j|! 
if xs[i] == xs[j]! 
pairs = pairs +! 
xs[i]! 
end! 
end! 
end! 
Ruby
4 
Very Quick Introduction of Today’s Contents 
I have implemented the same feature in Ruby! 
The source code on GitHub! 
https://github.com/egison/egison-ruby 
Enumerate the elements of 
the collection ‘xs’ that appear 
more than twice 
match_all(xs) do! 
with(Multiset.(_x,__x, *_)) { x }! 
end! 
Ruby with Egison gem 
pairs = []! 
(1..n).each do |i|! 
(i..n).each do |j|! 
if xs[i] == xs[j]! 
pairs = pairs +! 
xs[i]! 
end! 
end! 
end! 
Ruby
5 
Very Quick Introduction of Today’s Contents 
Poker hands analyzer with a single expression in Ruby! 
Our pattern-matching expression 
represents all hands in a single pattern
6 
Very Quick Introduction of Today’s Contents 
We can also pattern-match against infinite streams. 
… , x, x + 2, …
7 
Source and English Document are on GitHub 
https://github.com/egison/egison-ruby
8 
Please Check My Blog Article, too
9 
We wrote also Japanese Documents on Qiita 
1,0004 views, 185 Hatena Bookmarks!
10 
Table of Contents 
1. Introduction - What is Pattern Matching? 
2. Egison Pattern Matching in Ruby 
3. Let’s Try Egison Gem 
4. Future Goal – Application of Egison
11 
Table of Contents 
1. Introduction - What is Pattern Matching? 
2. Egison Pattern Matching in Ruby 
3. Let’s Try Egison Gem 
4. Future Goal – Application of Egison
12 
What is Pattern Matching? 
A feature of programming languages that 
simplifies programs. 
• Data Decomposition 
• Pattern-matching enables us to extract and 
examine the value of an instance variable very 
easily 
• Conditional Branches 
• Pattern-matching eliminates nested and 
complex conditional branches
13 
Greeting Demonstration
14 
Greeting Demonstration
15 
Greeting Demonstration
16 
Greeting Demonstration 
fail
17 
Greeting Demonstration 
success
18 
Greeting Demonstration
19 
Flow of Pattern Matching 
fail
20 
Flow of Pattern Matching 
success
21 
Greeting Demonstration
22 
Flow of Pattern Matching 
fail
23 
Flow of Pattern Matching 
fail
24 
Flow of Pattern Matching 
fail
25 
Flow of Pattern Matching 
fail
26 
Flow of Pattern Matching 
success
27 
Greeting Demonstration
28 
Table of Contents 
1. Introduction - What is Pattern Matching? 
2. Egison Pattern Matching in Ruby 
3. Let’s Try Egison Gem 
4. Future Goal – Application of Egison
29 
The Features of Egison Pattern-Matching in Ruby 
We have features in addition to simplification of 
data decomposition and conditional branches 
• Customizable Way of Pattern-Matching 
• We can do pattern-matching against not only 
fixed data such as lists but also multisets and 
sets that have multiple ways of decomposition 
• Non-Linear Pattern-Matching 
• We allow multiple occurrences of same 
variables in patterns 
• Pattern-Matching with Backtracking 
• We allow multiple results of pattern-matching 
even infinite results
30 
Customizable Pattern Matching For Various Data 
We can define how to pattern-match for each data 
types
31 
Pattern Matching with Multiple Results 
We can handle multiple results of pattern-matching
32 
Element Patterns and Collection Patterns 
A literal that starts with ‘_’ is a pattern-variable. We 
can refer the result of pattern-matching through 
them.
33 
Element Patterns and Collection Patterns 
A subcollection pattern matches the subcollection 
of the target array. A subcollection pattern starts 
with ‘*’.
34 
Element Patterns and Collection Patterns 
A literal that starts with ‘_’ is a pattern-variable. We 
can refer the result of pattern-matching through 
them.
35 
Element Patterns and Collection Patterns 
A subcollection pattern matches the subcollection 
of the target array. A subcollection pattern starts 
with ‘*’.
36 
Combinations with Pattern Matching 
… , x, …, y, … 
… , x, …, y, …, z, …
37 
Non-Linear Pattern Matching 
A Pattern whose form is ‘__("...")’ is a value pattern
38 
Non-Linear Pattern Matching 
A Pattern whose form is ‘__("...")’ is a value pattern 
We can omit (“ and “) when enclosed 
with them is a single variable
39 
Poker Hands Analyzer in Ruby
40 
The Pattern for Straight Flash 
Pattern for straight flash
41 
The Pattern for Straight Flash 
Pattern for straight flash
42 
Poker Hands Analyzer in Ruby 
Same suit with $s
Numbers are serial from $n 
43 
Poker Hands Analyzer in Ruby 
Same suit with $s 
We can write any expression after ‘__’
44 
Poker Hands Analyzer in Ruby 
Pattern for two pairs
45 
The Pattern for Two Pairs 
Pattern for two pairs
46 
The Pattern for Two Pairs 
Pattern for two pairs 
Same number with $m 
Same number with $n
47 
The Pattern for Two Pairs 
Pattern for two pairs 
Same number with $m 
Same number with $n 
Non-linear patterns have very strong power
48 
Poker Hands Analyzer in Ruby 
Non-linear patterns enables to 
represent all hands in a single pattern
Pattern Matching against Streams with Infinite Results 
We can also pattern-match against infinite streams. 
49 
… , x, x + 2, …
50 
One More Interesting Demonstration 
We can also enumerate prime triplets using and-patterns 
and or-patterns effectively.
51 
Table of Contents 
1. Introduction - What is Pattern Matching? 
2. Egison Pattern Matching in Ruby 
3. Let’s Try Egison Gem 
4. Future Goal – Application of Egison
52 
Egison Gem is on GitHub 
https://github.com/egison/egison-ruby
53 
Try Egison Gem! 
Egison Gem is written in pure Ruby. 
Installation is very easy via RubyGems. 
$ git clone https://github.com/egison/egison-ruby.git 
$ cd egison-ruby/ 
$ bundle install 
$ make 
$ ls sample/ 
… sample/poker_hands.rb … 
$ ruby sample/poker_hands.rb 
… 
We have prepared a lot of samples. 
Please try all of them.
54 
Table of Contents 
1. Introduction - What is Pattern Matching? 
2. Egison Pattern Matching in Ruby 
3. Let’s Try Egison Gem 
4. Future Goal – Application of Egison
55 
Introduction of the Egison Programming Language
56 
Profile of Egison 
I have created Egison to represent human’s intuition 
directly. 
Paradigm 
Pattern-matching-oriented, 
Purely functional 
Author 
Satoshi Egi 
License 
MIT 
Version 
3.3.12 (2014/9/18) 
First Released 
2011/5/24 
Filename Extension 
.egi 
Implemented in 
Haskell (about 3,500 lines)
57 
The Additional Features of Pure Egison 
We have features in additon to simplification of 
data decomposition and conditional branches 
• Ways of Pattern-Matching is More Customizable 
• We can customize the way of pattern-matching 
against not only against collection 
such as lists, multisets and sets 
• Pattern Modularization with Lexical Scoping 
• We allow multiple occurrences of same 
variables in patterns
58 
More complex example, Mahjong
59 
More complex example, Mahjong 
Two same tiles 
Three consecutive tiles 
Three same tiles
60 
More complex example, Mahjong 
Two same tiles 
Three consecutive tiles 
Three same tiles 
Seven twins or one twin + four shuntsu or kohtsu
61 
More complex example, Mahjong 
Two same tiles 
Three consecutive tiles 
Three same tiles 
Seven twins or one twin + four shuntsu or kohtsu 
Pattern modularization makes 
programming more simple!
62 
Egison on an online media
63 
Egison on Hacker News 
Egison was actively discussed 
on Hacker News twice!
64 
Access Map of the Website in This Half Year 
(2014/1/14 – 2014/7/14) 
Total session is 14,109
65 
Egison will be taught in the University of Tokyo by 
Prof. Hagiya 
Egison will have big impact on 
the academic world, too!
66 
Growth of Community in This Year (2013/11/15 – 2014/9/18) 
• Mailing List Members 
• Before: 12 – Only my friends 
• Current: 23 – Communicating in English 
• Stargazers on GitHub 
• Before: 12 – Only my friends 
• Current: 214 – People from all over the world!
67 
My Mind Map on Programming Language
68 
My Mind Map on Programming Language
69 
My Mind Map on Programming Language 
Egison is pioneering this field!
70 
Application of Egison
71 
There is a Wide Range of Application 
• Daily programming 
• Able to express complex tasks simply 
• Data access and analysis 
• Work as the most elegant query language 
• Able to access the wide range of data types in a 
unified way 
• Natural language processing 
• Able to handle complex structures intuitively as 
humans do in their mind 
• AI (Mathematical expression handling) 
• Able to handle various mathematical and abstract 
notions directly
72 
Query example 
• Query that returns twitter users who are 
followed by “__Egi” but not follow back 
“__Egi”. 
User: 
id integer 
name string 
Follow: 
from_id integer 
to_id Integer
73 
SQL version 
• Complex and difficult to understand 
• Complex where clause contains “NOT EXIST” 
• Subquery
74 
Egison version 
• Very Simple 
• No where clauses 
• No subquery
75 
Egison version 
• Very Simple 
• No where clauses 
• No subquery 
Joining 4 tables 
1. Get id of “__Egi” 
2. Followed by ‘uid’ 
not 3. But not follow back 
4. Get name of ‘fid’ 
Return the results
76 
My Dream 
• Daily programming 
• Able to express complex tasks simply 
• Data access and analysis 
• Work as the most elegant query language 
• Able to access the wide range of data types in a 
unified way 
• Natural language processing 
• Programs that find interesting things 
• Programs that build math theories 
• Programs that generate programs 
• Able to handle complex structures intuitively as 
humans do in their mind 
• AI (Mathematical expression handling) 
• Able to handle various mathematical and abstract 
notions directly
[ANN]Articles on Egison will be on CodeIQ MAGAZINE 
77
78 
[ANN] We will post Egison problems on CodeIQ
79 
Thank you! 
Please try Egison and give us 
feedback! 
satoshi.egi@mail.rakuten.com
80 
Problem 
What is the 40th pair of prime 
numbers of the form (p, p+8)? 
Please try and answer to 
@Egison_Lang! 
e.g. [3, 11] [5, 13] [11, 19]…

Ruby Egison

  • 1.
    Egison Pattern Matching in Ruby - Express Intuition Directly with Essentially New Syntax - Vol.01 Sep/18/2014 Satoshi Egi Rakuten Institute of Technology http://rit.rakuten.co.jp/
  • 2.
    2 Self-Introduction Name Satoshi Egi (江木 聡志) Association Rakuten Institute of Technology (楽天技術研究所) Education Majored Computer Science in the University of Tokyo Interests Programming Languages, AI (Mathematics) Website http://www.egison.org/~egi/
  • 3.
    3 Very QuickIntroduction of Today’s Contents I have created the programming language that realized non-linear pattern-matching even against data that have no standard form. Non-linear patterns allow multiple occurrences of same variables in a pattern Enumerate the elements of the collection ‘xs’ that appear more than twice (match-all xs (multiset integer)! [<cons $x <cons ,x _>> x])! Egison pairs = []! (1..n).each do |i|! (i..n).each do |j|! if xs[i] == xs[j]! pairs = pairs +! xs[i]! end! end! end! Ruby
  • 4.
    4 Very QuickIntroduction of Today’s Contents I have implemented the same feature in Ruby! The source code on GitHub! https://github.com/egison/egison-ruby Enumerate the elements of the collection ‘xs’ that appear more than twice match_all(xs) do! with(Multiset.(_x,__x, *_)) { x }! end! Ruby with Egison gem pairs = []! (1..n).each do |i|! (i..n).each do |j|! if xs[i] == xs[j]! pairs = pairs +! xs[i]! end! end! end! Ruby
  • 5.
    5 Very QuickIntroduction of Today’s Contents Poker hands analyzer with a single expression in Ruby! Our pattern-matching expression represents all hands in a single pattern
  • 6.
    6 Very QuickIntroduction of Today’s Contents We can also pattern-match against infinite streams. … , x, x + 2, …
  • 7.
    7 Source andEnglish Document are on GitHub https://github.com/egison/egison-ruby
  • 8.
    8 Please CheckMy Blog Article, too
  • 9.
    9 We wrotealso Japanese Documents on Qiita 1,0004 views, 185 Hatena Bookmarks!
  • 10.
    10 Table ofContents 1. Introduction - What is Pattern Matching? 2. Egison Pattern Matching in Ruby 3. Let’s Try Egison Gem 4. Future Goal – Application of Egison
  • 11.
    11 Table ofContents 1. Introduction - What is Pattern Matching? 2. Egison Pattern Matching in Ruby 3. Let’s Try Egison Gem 4. Future Goal – Application of Egison
  • 12.
    12 What isPattern Matching? A feature of programming languages that simplifies programs. • Data Decomposition • Pattern-matching enables us to extract and examine the value of an instance variable very easily • Conditional Branches • Pattern-matching eliminates nested and complex conditional branches
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
    19 Flow ofPattern Matching fail
  • 20.
    20 Flow ofPattern Matching success
  • 21.
  • 22.
    22 Flow ofPattern Matching fail
  • 23.
    23 Flow ofPattern Matching fail
  • 24.
    24 Flow ofPattern Matching fail
  • 25.
    25 Flow ofPattern Matching fail
  • 26.
    26 Flow ofPattern Matching success
  • 27.
  • 28.
    28 Table ofContents 1. Introduction - What is Pattern Matching? 2. Egison Pattern Matching in Ruby 3. Let’s Try Egison Gem 4. Future Goal – Application of Egison
  • 29.
    29 The Featuresof Egison Pattern-Matching in Ruby We have features in addition to simplification of data decomposition and conditional branches • Customizable Way of Pattern-Matching • We can do pattern-matching against not only fixed data such as lists but also multisets and sets that have multiple ways of decomposition • Non-Linear Pattern-Matching • We allow multiple occurrences of same variables in patterns • Pattern-Matching with Backtracking • We allow multiple results of pattern-matching even infinite results
  • 30.
    30 Customizable PatternMatching For Various Data We can define how to pattern-match for each data types
  • 31.
    31 Pattern Matchingwith Multiple Results We can handle multiple results of pattern-matching
  • 32.
    32 Element Patternsand Collection Patterns A literal that starts with ‘_’ is a pattern-variable. We can refer the result of pattern-matching through them.
  • 33.
    33 Element Patternsand Collection Patterns A subcollection pattern matches the subcollection of the target array. A subcollection pattern starts with ‘*’.
  • 34.
    34 Element Patternsand Collection Patterns A literal that starts with ‘_’ is a pattern-variable. We can refer the result of pattern-matching through them.
  • 35.
    35 Element Patternsand Collection Patterns A subcollection pattern matches the subcollection of the target array. A subcollection pattern starts with ‘*’.
  • 36.
    36 Combinations withPattern Matching … , x, …, y, … … , x, …, y, …, z, …
  • 37.
    37 Non-Linear PatternMatching A Pattern whose form is ‘__("...")’ is a value pattern
  • 38.
    38 Non-Linear PatternMatching A Pattern whose form is ‘__("...")’ is a value pattern We can omit (“ and “) when enclosed with them is a single variable
  • 39.
    39 Poker HandsAnalyzer in Ruby
  • 40.
    40 The Patternfor Straight Flash Pattern for straight flash
  • 41.
    41 The Patternfor Straight Flash Pattern for straight flash
  • 42.
    42 Poker HandsAnalyzer in Ruby Same suit with $s
  • 43.
    Numbers are serialfrom $n 43 Poker Hands Analyzer in Ruby Same suit with $s We can write any expression after ‘__’
  • 44.
    44 Poker HandsAnalyzer in Ruby Pattern for two pairs
  • 45.
    45 The Patternfor Two Pairs Pattern for two pairs
  • 46.
    46 The Patternfor Two Pairs Pattern for two pairs Same number with $m Same number with $n
  • 47.
    47 The Patternfor Two Pairs Pattern for two pairs Same number with $m Same number with $n Non-linear patterns have very strong power
  • 48.
    48 Poker HandsAnalyzer in Ruby Non-linear patterns enables to represent all hands in a single pattern
  • 49.
    Pattern Matching againstStreams with Infinite Results We can also pattern-match against infinite streams. 49 … , x, x + 2, …
  • 50.
    50 One MoreInteresting Demonstration We can also enumerate prime triplets using and-patterns and or-patterns effectively.
  • 51.
    51 Table ofContents 1. Introduction - What is Pattern Matching? 2. Egison Pattern Matching in Ruby 3. Let’s Try Egison Gem 4. Future Goal – Application of Egison
  • 52.
    52 Egison Gemis on GitHub https://github.com/egison/egison-ruby
  • 53.
    53 Try EgisonGem! Egison Gem is written in pure Ruby. Installation is very easy via RubyGems. $ git clone https://github.com/egison/egison-ruby.git $ cd egison-ruby/ $ bundle install $ make $ ls sample/ … sample/poker_hands.rb … $ ruby sample/poker_hands.rb … We have prepared a lot of samples. Please try all of them.
  • 54.
    54 Table ofContents 1. Introduction - What is Pattern Matching? 2. Egison Pattern Matching in Ruby 3. Let’s Try Egison Gem 4. Future Goal – Application of Egison
  • 55.
    55 Introduction ofthe Egison Programming Language
  • 56.
    56 Profile ofEgison I have created Egison to represent human’s intuition directly. Paradigm Pattern-matching-oriented, Purely functional Author Satoshi Egi License MIT Version 3.3.12 (2014/9/18) First Released 2011/5/24 Filename Extension .egi Implemented in Haskell (about 3,500 lines)
  • 57.
    57 The AdditionalFeatures of Pure Egison We have features in additon to simplification of data decomposition and conditional branches • Ways of Pattern-Matching is More Customizable • We can customize the way of pattern-matching against not only against collection such as lists, multisets and sets • Pattern Modularization with Lexical Scoping • We allow multiple occurrences of same variables in patterns
  • 58.
    58 More complexexample, Mahjong
  • 59.
    59 More complexexample, Mahjong Two same tiles Three consecutive tiles Three same tiles
  • 60.
    60 More complexexample, Mahjong Two same tiles Three consecutive tiles Three same tiles Seven twins or one twin + four shuntsu or kohtsu
  • 61.
    61 More complexexample, Mahjong Two same tiles Three consecutive tiles Three same tiles Seven twins or one twin + four shuntsu or kohtsu Pattern modularization makes programming more simple!
  • 62.
    62 Egison onan online media
  • 63.
    63 Egison onHacker News Egison was actively discussed on Hacker News twice!
  • 64.
    64 Access Mapof the Website in This Half Year (2014/1/14 – 2014/7/14) Total session is 14,109
  • 65.
    65 Egison willbe taught in the University of Tokyo by Prof. Hagiya Egison will have big impact on the academic world, too!
  • 66.
    66 Growth ofCommunity in This Year (2013/11/15 – 2014/9/18) • Mailing List Members • Before: 12 – Only my friends • Current: 23 – Communicating in English • Stargazers on GitHub • Before: 12 – Only my friends • Current: 214 – People from all over the world!
  • 67.
    67 My MindMap on Programming Language
  • 68.
    68 My MindMap on Programming Language
  • 69.
    69 My MindMap on Programming Language Egison is pioneering this field!
  • 70.
  • 71.
    71 There isa Wide Range of Application • Daily programming • Able to express complex tasks simply • Data access and analysis • Work as the most elegant query language • Able to access the wide range of data types in a unified way • Natural language processing • Able to handle complex structures intuitively as humans do in their mind • AI (Mathematical expression handling) • Able to handle various mathematical and abstract notions directly
  • 72.
    72 Query example • Query that returns twitter users who are followed by “__Egi” but not follow back “__Egi”. User: id integer name string Follow: from_id integer to_id Integer
  • 73.
    73 SQL version • Complex and difficult to understand • Complex where clause contains “NOT EXIST” • Subquery
  • 74.
    74 Egison version • Very Simple • No where clauses • No subquery
  • 75.
    75 Egison version • Very Simple • No where clauses • No subquery Joining 4 tables 1. Get id of “__Egi” 2. Followed by ‘uid’ not 3. But not follow back 4. Get name of ‘fid’ Return the results
  • 76.
    76 My Dream • Daily programming • Able to express complex tasks simply • Data access and analysis • Work as the most elegant query language • Able to access the wide range of data types in a unified way • Natural language processing • Programs that find interesting things • Programs that build math theories • Programs that generate programs • Able to handle complex structures intuitively as humans do in their mind • AI (Mathematical expression handling) • Able to handle various mathematical and abstract notions directly
  • 77.
    [ANN]Articles on Egisonwill be on CodeIQ MAGAZINE 77
  • 78.
    78 [ANN] Wewill post Egison problems on CodeIQ
  • 79.
    79 Thank you! Please try Egison and give us feedback! satoshi.egi@mail.rakuten.com
  • 80.
    80 Problem Whatis the 40th pair of prime numbers of the form (p, p+8)? Please try and answer to @Egison_Lang! e.g. [3, 11] [5, 13] [11, 19]…