Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Egison Pattern Matching 
in Ruby 
- Express Intuition Directly with 
Essentially New Syntax - 
Vol.01 Sep/18/2014 
Satoshi...
2 
Self-Introduction 
Name 
Satoshi Egi (江木 聡志) 
Association 
Rakuten Institute of Technology (楽天技術研究所) 
Education 
Majore...
3 
Very Quick Introduction of Today’s Contents 
I have created the programming language that 
realized non-linear pattern-...
4 
Very Quick Introduction of Today’s Contents 
I have implemented the same feature in Ruby! 
The source code on GitHub! 
...
5 
Very Quick Introduction of Today’s Contents 
Poker hands analyzer with a single expression in Ruby! 
Our pattern-matchi...
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 Egiso...
11 
Table of Contents 
1. Introduction - What is Pattern Matching? 
2. Egison Pattern Matching in Ruby 
3. Let’s Try Egiso...
12 
What is Pattern Matching? 
A feature of programming languages that 
simplifies programs. 
• Data Decomposition 
• Patt...
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 Egiso...
29 
The Features of Egison Pattern-Matching in Ruby 
We have features in addition to simplification of 
data decomposition...
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 resu...
33 
Element Patterns and Collection Patterns 
A subcollection pattern matches the subcollection 
of the target array. A su...
34 
Element Patterns and Collection Patterns 
A literal that starts with ‘_’ is a pattern-variable. We 
can refer the resu...
35 
Element Patterns and Collection Patterns 
A subcollection pattern matches the subcollection 
of the target array. A su...
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 enclos...
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 v...
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 ...
50 
One More Interesting Demonstration 
We can also enumerate prime triplets using and-patterns 
and or-patterns effective...
51 
Table of Contents 
1. Introduction - What is Pattern Matching? 
2. Egison Pattern Matching in Ruby 
3. Let’s Try Egiso...
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://git...
54 
Table of Contents 
1. Introduction - What is Pattern Matching? 
2. Egison Pattern Matching in Ruby 
3. Let’s Try Egiso...
55 
Introduction of the Egison Programming Language
56 
Profile of Egison 
I have created Egison to represent human’s intuition 
directly. 
Paradigm 
Pattern-matching-oriente...
57 
The Additional Features of Pure Egison 
We have features in additon to simplification of 
data decomposition and condi...
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 + fo...
61 
More complex example, Mahjong 
Two same tiles 
Three consecutive tiles 
Three same tiles 
Seven twins or one twin + fo...
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,...
66 
Growth of Community in This Year (2013/11/15 – 2014/9/18) 
• Mailing List Members 
• Before: 12 – Only my friends 
• C...
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 a...
72 
Query example 
• Query that returns twitter users who are 
followed by “__Egi” but not follow back 
“__Egi”. 
User: 
i...
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 ...
76 
My Dream 
• Daily programming 
• Able to express complex tasks simply 
• Data access and analysis 
• Work as the most ...
[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. ...
Upcoming SlideShare
Loading in …5
×

Ruby Egison

4,646 views

Published on

This slide is presented at RubyKaigi 2014 on Sep 18.

We have designed and implemented the library that realizes non-linear pattern matching against unfree data types. We can directly express pattern-matching against lists, multisets, and sets using this library.
The library is already released via RubyGems.org as one of gems.

The expressive power of this gem derives from the theory behind the Egison programming language and is so strong that we can write poker-hands analyzer in a single pattern matching expression. This is impossible even in any other state-of-the-art programming language.

Pattern matching is one of the most important features of programming language for intuitive representation of algorithms.
Our library simplifies code by replacing not only complex conditional branches but also nested loops with an intuitive pattern-matching expression.

Published in: Technology

Ruby Egison

  1. 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. 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. 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. 4. 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. 5. 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. 6. 6 Very Quick Introduction of Today’s Contents We can also pattern-match against infinite streams. … , x, x + 2, …
  7. 7. 7 Source and English Document are on GitHub https://github.com/egison/egison-ruby
  8. 8. 8 Please Check My Blog Article, too
  9. 9. 9 We wrote also Japanese Documents on Qiita 1,0004 views, 185 Hatena Bookmarks!
  10. 10. 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. 11. 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. 12. 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. 13. 13 Greeting Demonstration
  14. 14. 14 Greeting Demonstration
  15. 15. 15 Greeting Demonstration
  16. 16. 16 Greeting Demonstration fail
  17. 17. 17 Greeting Demonstration success
  18. 18. 18 Greeting Demonstration
  19. 19. 19 Flow of Pattern Matching fail
  20. 20. 20 Flow of Pattern Matching success
  21. 21. 21 Greeting Demonstration
  22. 22. 22 Flow of Pattern Matching fail
  23. 23. 23 Flow of Pattern Matching fail
  24. 24. 24 Flow of Pattern Matching fail
  25. 25. 25 Flow of Pattern Matching fail
  26. 26. 26 Flow of Pattern Matching success
  27. 27. 27 Greeting Demonstration
  28. 28. 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. 29. 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. 30. 30 Customizable Pattern Matching For Various Data We can define how to pattern-match for each data types
  31. 31. 31 Pattern Matching with Multiple Results We can handle multiple results of pattern-matching
  32. 32. 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. 33. 33 Element Patterns and Collection Patterns A subcollection pattern matches the subcollection of the target array. A subcollection pattern starts with ‘*’.
  34. 34. 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. 35. 35 Element Patterns and Collection Patterns A subcollection pattern matches the subcollection of the target array. A subcollection pattern starts with ‘*’.
  36. 36. 36 Combinations with Pattern Matching … , x, …, y, … … , x, …, y, …, z, …
  37. 37. 37 Non-Linear Pattern Matching A Pattern whose form is ‘__("...")’ is a value pattern
  38. 38. 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. 39. 39 Poker Hands Analyzer in Ruby
  40. 40. 40 The Pattern for Straight Flash Pattern for straight flash
  41. 41. 41 The Pattern for Straight Flash Pattern for straight flash
  42. 42. 42 Poker Hands Analyzer in Ruby Same suit with $s
  43. 43. Numbers are serial from $n 43 Poker Hands Analyzer in Ruby Same suit with $s We can write any expression after ‘__’
  44. 44. 44 Poker Hands Analyzer in Ruby Pattern for two pairs
  45. 45. 45 The Pattern for Two Pairs Pattern for two pairs
  46. 46. 46 The Pattern for Two Pairs Pattern for two pairs Same number with $m Same number with $n
  47. 47. 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. 48. 48 Poker Hands Analyzer in Ruby Non-linear patterns enables to represent all hands in a single pattern
  49. 49. Pattern Matching against Streams with Infinite Results We can also pattern-match against infinite streams. 49 … , x, x + 2, …
  50. 50. 50 One More Interesting Demonstration We can also enumerate prime triplets using and-patterns and or-patterns effectively.
  51. 51. 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. 52. 52 Egison Gem is on GitHub https://github.com/egison/egison-ruby
  53. 53. 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. 54. 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. 55. 55 Introduction of the Egison Programming Language
  56. 56. 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. 57. 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. 58. 58 More complex example, Mahjong
  59. 59. 59 More complex example, Mahjong Two same tiles Three consecutive tiles Three same tiles
  60. 60. 60 More complex example, Mahjong Two same tiles Three consecutive tiles Three same tiles Seven twins or one twin + four shuntsu or kohtsu
  61. 61. 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. 62. 62 Egison on an online media
  63. 63. 63 Egison on Hacker News Egison was actively discussed on Hacker News twice!
  64. 64. 64 Access Map of the Website in This Half Year (2014/1/14 – 2014/7/14) Total session is 14,109
  65. 65. 65 Egison will be taught in the University of Tokyo by Prof. Hagiya Egison will have big impact on the academic world, too!
  66. 66. 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. 67. 67 My Mind Map on Programming Language
  68. 68. 68 My Mind Map on Programming Language
  69. 69. 69 My Mind Map on Programming Language Egison is pioneering this field!
  70. 70. 70 Application of Egison
  71. 71. 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. 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. 73 SQL version • Complex and difficult to understand • Complex where clause contains “NOT EXIST” • Subquery
  74. 74. 74 Egison version • Very Simple • No where clauses • No subquery
  75. 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. 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. 77. [ANN]Articles on Egison will be on CodeIQ MAGAZINE 77
  78. 78. 78 [ANN] We will post Egison problems on CodeIQ
  79. 79. 79 Thank you! Please try Egison and give us feedback! satoshi.egi@mail.rakuten.com
  80. 80. 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]…

×