SlideShare a Scribd company logo
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]…

More Related Content

PDF
[Rakuten TechConf2014] [D-2] The Pattern-Matching-Oriented Programming Langua...
PPTX
CSCI 200 Java Chapter 03 Using Classes
PPTX
Brixton Library Technology Initiative Week0 Recap
PDF
プログラミング言語Egison - 表現の新たな抽象化の発見
PDF
The Egison Programming Language
PDF
NLP Bootcamp 2018 : Representation Learning of text for NLP
PDF
Implementing Conceptual Search in Solr using LSA and Word2Vec: Presented by S...
PPTX
Design Patterns
[Rakuten TechConf2014] [D-2] The Pattern-Matching-Oriented Programming Langua...
CSCI 200 Java Chapter 03 Using Classes
Brixton Library Technology Initiative Week0 Recap
プログラミング言語Egison - 表現の新たな抽象化の発見
The Egison Programming Language
NLP Bootcamp 2018 : Representation Learning of text for NLP
Implementing Conceptual Search in Solr using LSA and Word2Vec: Presented by S...
Design Patterns

Similar to Ruby Egison (20)

PPTX
NLP Bootcamp
PDF
Generating Natural-Language Text with Neural Networks
DOCX
Ruby Programming
PPTX
Apex code (Salesforce)
PPTX
Introduction to Neural Information Retrieval and Large Language Models
PDF
Souvenir's Booth - Algorithm Design and Analysis Project Project Report
PPTX
NPTEL complete.pptx.pptx
PPTX
Applied category theory: the emerging science of compositionality
PPTX
Introducción a NLP (Natural Language Processing) en Azure
PPTX
C# 101: Intro to Programming with C#
PPTX
Natural Language Query to SQL conversion using Machine Learning Approach
PDF
Fashion product de-duplication with image similarity and LSH
DOCX
FULL DOCUMENT.docx
PDF
NPTEL_SEM_3.pdf
PPTX
Faking a Grid - Franco Alvarado (Macmillan Learning), Betsy Granger (Macmilla...
PPT
Hub102 - JS - Lesson3
PPTX
C# coding standards, good programming principles & refactoring
PPTX
Word2vec slide(lab seminar)
PDF
Introduction to Elixir
NLP Bootcamp
Generating Natural-Language Text with Neural Networks
Ruby Programming
Apex code (Salesforce)
Introduction to Neural Information Retrieval and Large Language Models
Souvenir's Booth - Algorithm Design and Analysis Project Project Report
NPTEL complete.pptx.pptx
Applied category theory: the emerging science of compositionality
Introducción a NLP (Natural Language Processing) en Azure
C# 101: Intro to Programming with C#
Natural Language Query to SQL conversion using Machine Learning Approach
Fashion product de-duplication with image similarity and LSH
FULL DOCUMENT.docx
NPTEL_SEM_3.pdf
Faking a Grid - Franco Alvarado (Macmillan Learning), Betsy Granger (Macmilla...
Hub102 - JS - Lesson3
C# coding standards, good programming principles & refactoring
Word2vec slide(lab seminar)
Introduction to Elixir
Ad

More from Rakuten Group, Inc. (20)

PDF
EPSS (Exploit Prediction Scoring System)モニタリングツールの開発
PPTX
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
PDF
楽天における安全な秘匿情報管理への道のり
PDF
What Makes Software Green?
PDF
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...
PDF
DataSkillCultureを浸透させる楽天の取り組み
PDF
大規模なリアルタイム監視の導入と展開
PDF
楽天における大規模データベースの運用
PDF
楽天サービスを支えるネットワークインフラストラクチャー
PDF
楽天の規模とクラウドプラットフォーム統括部の役割
PDF
Rakuten Services and Infrastructure Team.pdf
PDF
The Data Platform Administration Handling the 100 PB.pdf
PDF
Supporting Internal Customers as Technical Account Managers.pdf
PDF
Making Cloud Native CI_CD Services.pdf
PDF
How We Defined Our Own Cloud.pdf
PDF
Travel & Leisure Platform Department's tech info
PDF
Travel & Leisure Platform Department's tech info
PDF
OWASPTop10_Introduction
PDF
Introduction of GORA API Group technology
PDF
100PBを越えるデータプラットフォームの実情
EPSS (Exploit Prediction Scoring System)モニタリングツールの開発
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
楽天における安全な秘匿情報管理への道のり
What Makes Software Green?
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...
DataSkillCultureを浸透させる楽天の取り組み
大規模なリアルタイム監視の導入と展開
楽天における大規模データベースの運用
楽天サービスを支えるネットワークインフラストラクチャー
楽天の規模とクラウドプラットフォーム統括部の役割
Rakuten Services and Infrastructure Team.pdf
The Data Platform Administration Handling the 100 PB.pdf
Supporting Internal Customers as Technical Account Managers.pdf
Making Cloud Native CI_CD Services.pdf
How We Defined Our Own Cloud.pdf
Travel & Leisure Platform Department's tech info
Travel & Leisure Platform Department's tech info
OWASPTop10_Introduction
Introduction of GORA API Group technology
100PBを越えるデータプラットフォームの実情
Ad

Recently uploaded (20)

PPT
Teaching material agriculture food technology
PPTX
Spectroscopy.pptx food analysis technology
PPTX
Cloud computing and distributed systems.
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Encapsulation theory and applications.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Teaching material agriculture food technology
Spectroscopy.pptx food analysis technology
Cloud computing and distributed systems.
Spectral efficient network and resource selection model in 5G networks
Per capita expenditure prediction using model stacking based on satellite ima...
Dropbox Q2 2025 Financial Results & Investor Presentation
Diabetes mellitus diagnosis method based random forest with bat algorithm
Chapter 3 Spatial Domain Image Processing.pdf
Encapsulation theory and applications.pdf
MIND Revenue Release Quarter 2 2025 Press Release
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Assigned Numbers - 2025 - Bluetooth® Document
Programs and apps: productivity, graphics, security and other tools
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
A comparative analysis of optical character recognition models for extracting...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Profit Center Accounting in SAP S/4HANA, S4F28 Col11

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 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 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 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 Very Quick Introduction of Today’s Contents We can also pattern-match against infinite streams. … , x, x + 2, …
  • 7. 7 Source and English Document are on GitHub https://github.com/egison/egison-ruby
  • 8. 8 Please Check My Blog Article, too
  • 9. 9 We wrote also Japanese Documents on Qiita 1,0004 views, 185 Hatena Bookmarks!
  • 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 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 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
  • 19. 19 Flow of Pattern Matching fail
  • 20. 20 Flow of Pattern Matching success
  • 22. 22 Flow of Pattern Matching fail
  • 23. 23 Flow of Pattern Matching fail
  • 24. 24 Flow of Pattern Matching fail
  • 25. 25 Flow of Pattern Matching fail
  • 26. 26 Flow of Pattern Matching success
  • 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 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 Customizable Pattern Matching For Various Data We can define how to pattern-match for each data types
  • 31. 31 Pattern Matching with Multiple Results We can handle multiple results of pattern-matching
  • 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 Element Patterns and Collection Patterns A subcollection pattern matches the subcollection of the target array. A subcollection pattern starts with ‘*’.
  • 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 Element Patterns and Collection Patterns A subcollection pattern matches the subcollection of the target array. A subcollection pattern starts with ‘*’.
  • 36. 36 Combinations with Pattern Matching … , x, …, y, … … , x, …, y, …, z, …
  • 37. 37 Non-Linear Pattern Matching A Pattern whose form is ‘__("...")’ is a value pattern
  • 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 Poker Hands Analyzer in Ruby
  • 40. 40 The Pattern for Straight Flash Pattern for straight flash
  • 41. 41 The Pattern for Straight Flash Pattern for straight flash
  • 42. 42 Poker Hands Analyzer in Ruby Same suit with $s
  • 43. Numbers are serial from $n 43 Poker Hands Analyzer in Ruby Same suit with $s We can write any expression after ‘__’
  • 44. 44 Poker Hands Analyzer in Ruby Pattern for two pairs
  • 45. 45 The Pattern for Two Pairs Pattern for two pairs
  • 46. 46 The Pattern for Two Pairs Pattern for two pairs Same number with $m Same number with $n
  • 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 Poker Hands Analyzer in Ruby Non-linear patterns enables to represent all hands in a single pattern
  • 49. Pattern Matching against Streams with Infinite Results We can also pattern-match against infinite streams. 49 … , x, x + 2, …
  • 50. 50 One More Interesting Demonstration We can also enumerate prime triplets using and-patterns and or-patterns effectively.
  • 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 Egison Gem is on GitHub https://github.com/egison/egison-ruby
  • 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 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 Introduction of the Egison Programming Language
  • 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 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 More complex example, Mahjong
  • 59. 59 More complex example, Mahjong Two same tiles Three consecutive tiles Three same tiles
  • 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 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 Egison on an online media
  • 63. 63 Egison on Hacker News Egison was actively discussed on Hacker News twice!
  • 64. 64 Access Map of the Website in This Half Year (2014/1/14 – 2014/7/14) Total session is 14,109
  • 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 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 My Mind Map on Programming Language
  • 68. 68 My Mind Map on Programming Language
  • 69. 69 My Mind Map on Programming Language Egison is pioneering this field!
  • 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 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 Egison will be on CodeIQ MAGAZINE 77
  • 78. 78 [ANN] We will post Egison problems on CodeIQ
  • 79. 79 Thank you! Please try Egison and give us feedback! satoshi.egi@mail.rakuten.com
  • 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]…