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.
The Pattern-Matching- 
Oriented Programming 
Language Egison 
- Express Intuition Directly with 
Essentially New Syntax - ...
2 
Self-Introduction 
Name Satoshi Egi (Ụᮌ㻌⪽ᚿ) 
Association Rakuten Institute of Technology (ᴦኳᢏ⾡◊✲ᡤ) 
Education Majored i...
3 
What is Egison? 
Egison is a programming language that realizes 
non-linear pattern-matching even against data 
that ha...
4 
Demonstration: Poker Hands
5 
Demonstration: Mahjong 
Two same tiles 
Three consecutive tiles 
Three same tiles 
Seven twins or one twin + four shunt...
6 
Demonstration: Prime Numbers
7 
Motivation 
I have created Egison to represent human’s 
intuition directly. 
The word “intuitive” is often used in the ...
8 
Motivation 
I have created Egison to represent human’s 
intuition directly. 
There are cases that we still need to tran...
9 
Profile of Egison 
Egison is open-source software maintained on GitHub. 
https://github.com/egison/egison 
Paradigm Pat...
10 
Website – Everything about Egison is Here
11 
Table of Contents 
1. Concept of Egison (15 minutes) 
2. Play with Egison (5 minutes) 
3. Current Status (5 minutes) 
...
12 
The Concept of Egison
13 
The ‘match-all’ Expression 
Meaning: Pattern match against “{1 2 3}” as a 
“list of integers” with the pattern 
“cons ...
14 
Matchers 
A matcher specifies the way of pattern-matching.
15 
Matchers 
A matcher specifies the way of pattern-matching.
16 
The ‘cons’ Pattern 
The pattern constructor ‘cons’ divides a collection 
into an element and the rest.
17 
The ‘cons’ Pattern 
The pattern constructor ‘cons’ divides a collection 
into an element and the rest.
18 
Pattern-Matching with Multiple Results 
We can handle pattern-matching with multiple results.
19 
The Nested ‘cons’ Pattern 
We can extract two elements from a collection with the 
nested cons pattern.
20 
The ‘join’ Pattern 
The pattern constructor ‘join’ divides a collection into 
two collections.
21 
Non-Linear Patterns 
Patterns that have ‘,’ ahead are called value-patterns. 
The equality is checked for a value-patt...
22 
Non-Linear Patterns 
Patterns that have ‘,’ ahead are called value-patterns. 
The equality is checked for a value-patt...
23 
Demonstration: Poker Hands
24 
Demonstration: Poker Hands 
Pattern for straight flash
25 
Demonstration: Poker Hands 
Match as a set of cards 
Pattern for straight flash
26 
The Pattern for Straight Flush
27 
The Pattern for Straight Flush 
Same suit with $s
Numbers are serial from $n 
28 
The Pattern for Straight Flush 
Same suit with $s
Numbers are serial from $n 
29 
The Pattern for Straight Flush 
Same suit with $s 
We can write any expression after ‘,’
30 
Demonstration: Poker Hands 
Pattern for two pair
31 
The Pattern for Two Pair
32 
The Pattern for Two Pair 
Matches with any suit 
Matches with any card
33 
The Pattern for Two Pair 
Same number with $m 
Same number with $n 
Matches with any suit 
Matches with any card
34 
The Pattern for Two Pair 
Same number with $m 
Same number with $n 
Matches with any suit 
Matches with any card 
Non-...
35 
Demonstration: Poker Hands 
Non-linear patterns enables to 
represent all hands in a single pattern
36 
Demonstration: Poker Hands 
Egisonists can write this 
code in 2 minutes! 
Non-linear patterns enables to 
represent a...
37 
Java Version 
Just finding a pair of cards is already complex. 
public static boolean hasPair(Card[] cards) {! 
for (i...
38 
Pattern-Matching with Infinite Results 
We can handle pattern-matching with infinite results.
39 
Demonstration: Prime Numbers
40 
Pattern-Matching against Nested Data Types 
We can pattern-match against nested data types such 
as lists of sets and ...
41 
Pattern Modularization with Lexical Scope 
We can modularize patterns with pattern-functions, 
functions that receive ...
42 
Pattern Modularization with Lexical Scope 
A pattern-function has lexical scoping, patterns can be 
reused in a progra...
43 
Demonstration: Mahjong
44 
Demonstration: Mahjong 
Two same tiles 
Three consecutive tiles 
Three same tiles
45 
Demonstration: Mahjong 
Two same tiles 
Three consecutive tiles 
Three same tiles 
Seven twins or one twin + four shun...
46 
Demonstration: Mahjong 
Two same tiles 
Three consecutive tiles 
Three same tiles 
Seven twins or one twin + four shun...
47 
Play with Egison
48 
Collections
49 
Infinite Collections
50 
Pattern Matching against Infinite Collections 
Pattern matching against an infinite collection
51 
Twin Prime Code on Homepage of Egison
52 
Current Status
53 
Egison Website
54 
Online Tutorial
55 
Online Demonstrations
56 
Egison on an Online Media
57 
Egison on Hacker News 
Egison was actively discussed 
on Hacker News twice!
58 
Egison Article on CodeIQ MAGAZINE
59 
Egison will be Taught at the University of Tokyo by 
Prof. Hagiya 
Egison will have a big impact 
on the academic worl...
60 
Access Map of the Website in Last Half Year 
(2014/4/23 – 2014/10/23) 
Total session is 15,228
61 
Growth of Community in This Year (2013/11/15 – 2014/10/25) 
• Mailing List Members 
• Before: 12 – Only my friends 
• ...
62 
Extending Other Languages
63 
Poker Hands Analyzer in Ruby
64 
Public Response to Ruby Extension 
10,466 views, 186 Hatena Bookmarks!
65 
RubyKaigi 2014 
Recently presented at 
RubyKaigi 2014!
66 
Future Plans 
- Applications in the Real World -
67 
Wide Range of Applications 
• Daily programming 
• Can express complex tasks simply 
• Data access and analysis 
• Wor...
68 
Wide Range of Applications 
• Daily programming 
• Can express complex tasks simply 
• Data access and analysis 
• Wor...
69 
Ideas of Software 
• Command line text editor 
• Command line text editor that uses Egison 
pattern-matching instead o...
70 
Wide Range of Applications 
• Daily programming 
• Can express complex tasks simply 
• Data access and analysis 
• Wor...
71 
Query Example 
• Let’s consider a query that returns twitter 
users who are followed by “__Egi” but not 
follow back “...
72 
SQL Version 
• Complex and difficult to understand 
• Complex where clause contains “NOT EXIST” 
• Subquery
73 
Egison Version 
• Very Simple 
• No where clauses 
• No subquery
74 
Egison Version 
• Very Simple 
• No where clauses 
• No subquery 
Joining 4 tables 
1. Get id of “__Egi” 
2. Followed ...
75 
GUI Frontend 
• We can provide GUI for intuitive data 
access 
• Data access for even non-engineers 
• Engineers can c...
76 
Database in the Next Age 
In the future, databases 
will be embedded and 
hidden in programming 
languages. 
We will b...
77 
Wide Range of Applications 
• Daily programming 
• Can express complex tasks simply 
• Data access and analysis 
• Wor...
78 
Wide Range of Applications 
• Daily programming 
• Can express complex tasks simply 
• Data access and analysis 
• Wor...
79 
My Mind Map on Programming Language
80 
My Mind Map on Programming Language
81 
My Mind Map on Programming Language 
Egison is pioneering this field!
Egison (current) 
Egison next version 
82 
Improve Egison as the Programming Language 
I am aiming to make Egison the perf...
Egison (current) 
Egison next version 
83 
Improve Egison as the Programming Language 
I am aiming to make Egison the perf...
84 
Thank you! 
Please visit our website! 
http://www.egison.org 
Follow us in Twitter @Egison_Lang 
Let’s talk and collab...
Upcoming SlideShare
Loading in …5
×

[Rakuten TechConf2014] [D-2] The Pattern-Matching-Oriented Programming Language Egison

2,918 views

Published on

Rakuten Technology Conference 2014
"The Pattern-Matching-Oriented Programming Language Egison"
Satoshi Egi (Rakuten)

Published in: Technology
  • Be the first to comment

[Rakuten TechConf2014] [D-2] The Pattern-Matching-Oriented Programming Language Egison

  1. 1. The Pattern-Matching- Oriented Programming Language Egison - Express Intuition Directly with Essentially New Syntax - Vol.01䚷Oct/25/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 in Computer Science at the University of Tokyo Interests Programming Languages, Automated Reasoning Website http://www.egison.org/~egi/
  3. 3. 3 What is Egison? Egison is a programming language that realizes 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 Demonstration: Poker Hands
  5. 5. 5 Demonstration: Mahjong Two same tiles Three consecutive tiles Three same tiles Seven twins or one twin + four shuntsu or kohtsu
  6. 6. 6 Demonstration: Prime Numbers
  7. 7. 7 Motivation I have created Egison to represent human’s intuition directly. The word “intuitive” is often used in the meaning “easy to understand”. However intuition itself is not “intuitive” at all. Therefore, the direct representation of intuition is not easy for many people to understand at the beginning. 䛂┤ឤⓗ䛃䛸䛔䛖ゝⴥ䛿䛂䜟䛛䜚䜔䛩䛔䛃䛸䛔䛖ព࿡䛷౑䜟䜜 䜛䛣䛸䛜ከ䛔䛷䛩䛜䚸┤ឤ⮬య䛿඲䛟䛂┤ឤⓗ䛃䛺䜒䛾䛷䛿 䛒䜚䜎䛫䜣䚹䛭䜜䜖䛘䛻䚸┤ឤ䛾┤᥋ⓗ䛺⾲⌧䛿ከ䛟䛾ே 䛻䛸䛳䛶䚸᭱ึ䛿䜟䛛䜚䜔䛩䛟䛒䜚䜎䛫䜣䚹
  8. 8. 8 Motivation I have created Egison to represent human’s intuition directly. There are cases that we still need to translate our thoughts for computers. By discovering such cases, analyzing our intuition, and finding their direct representation, I have created a new programming language Egison. ே㛫䛾⪃䛘䜢䝁䞁䝢䝳䞊䝍ྥ䛡䛻⩻ヂ䛧䛶グ㏙䛫䛽䜀䛺䜙 䛺䛔ሙ㠃䛿ᮍ䛰䛻䛒䜚䜎䛩䚹䛭䛾䜘䛖䛺ሙ㠃䜢ぢ䛴䛡䚸⮬ ㌟䛾┤ឤ䜢ศᯒ䛧䚸䛭䛾┤᥋ⓗ䛺⾲⌧䜢ぢฟ䛩䛣䛸䛻䜘䜚䚸 ⚾䛿᪂䛧䛔䝥䝻䜾䝷䝭䞁䜾ゝㄒEgison䜢స䜛䛻⮳䜚䜎䛧䛯䚹
  9. 9. 9 Profile of Egison Egison is open-source software maintained on GitHub. https://github.com/egison/egison Paradigm Pattern-matching-oriented, Purely functional Author Satoshi Egi License MIT Version 3.3.12 (2014/10/25) First Released 2011/5/24 Filename Extension .egi Implemented in Haskell (about 3,800 lines)
  10. 10. 10 Website – Everything about Egison is Here
  11. 11. 11 Table of Contents 1. Concept of Egison (15 minutes) 2. Play with Egison (5 minutes) 3. Current Status (5 minutes) 4. Future Plan (5 minutes)
  12. 12. 12 The Concept of Egison
  13. 13. 13 The ‘match-all’ Expression Meaning: Pattern match against “{1 2 3}” as a “list of integers” with the pattern “cons $x $xs” and return all results of pattern matching.
  14. 14. 14 Matchers A matcher specifies the way of pattern-matching.
  15. 15. 15 Matchers A matcher specifies the way of pattern-matching.
  16. 16. 16 The ‘cons’ Pattern The pattern constructor ‘cons’ divides a collection into an element and the rest.
  17. 17. 17 The ‘cons’ Pattern The pattern constructor ‘cons’ divides a collection into an element and the rest.
  18. 18. 18 Pattern-Matching with Multiple Results We can handle pattern-matching with multiple results.
  19. 19. 19 The Nested ‘cons’ Pattern We can extract two elements from a collection with the nested cons pattern.
  20. 20. 20 The ‘join’ Pattern The pattern constructor ‘join’ divides a collection into two collections.
  21. 21. 21 Non-Linear Patterns Patterns that have ‘,’ ahead are called value-patterns. The equality is checked for a value-pattern.
  22. 22. 22 Non-Linear Patterns Patterns that have ‘,’ ahead are called value-patterns. The equality is checked for a value-pattern. Same number with $x
  23. 23. 23 Demonstration: Poker Hands
  24. 24. 24 Demonstration: Poker Hands Pattern for straight flash
  25. 25. 25 Demonstration: Poker Hands Match as a set of cards Pattern for straight flash
  26. 26. 26 The Pattern for Straight Flush
  27. 27. 27 The Pattern for Straight Flush Same suit with $s
  28. 28. Numbers are serial from $n 28 The Pattern for Straight Flush Same suit with $s
  29. 29. Numbers are serial from $n 29 The Pattern for Straight Flush Same suit with $s We can write any expression after ‘,’
  30. 30. 30 Demonstration: Poker Hands Pattern for two pair
  31. 31. 31 The Pattern for Two Pair
  32. 32. 32 The Pattern for Two Pair Matches with any suit Matches with any card
  33. 33. 33 The Pattern for Two Pair Same number with $m Same number with $n Matches with any suit Matches with any card
  34. 34. 34 The Pattern for Two Pair Same number with $m Same number with $n Matches with any suit Matches with any card Non-linear patterns have very strong power
  35. 35. 35 Demonstration: Poker Hands Non-linear patterns enables to represent all hands in a single pattern
  36. 36. 36 Demonstration: Poker Hands Egisonists can write this code in 2 minutes! Non-linear patterns enables to represent all hands in a single pattern
  37. 37. 37 Java Version Just finding a pair of cards is already complex. public static boolean hasPair(Card[] cards) {! for (int i = 0; i = 4 ;i++) { ! for (int j = i + 1 ; j = 4 ; j++) {! if (cards[i] == (cards[j])) { ! return true;! }! return false;! } ! }! }! I found a poker-hand evaluator in Java more than 200 lines of code. http://www.codeproject.com/Articles/38821/Make-a-poker-hand-evalutator-in-Java
  38. 38. 38 Pattern-Matching with Infinite Results We can handle pattern-matching with infinite results.
  39. 39. 39 Demonstration: Prime Numbers
  40. 40. 40 Pattern-Matching against Nested Data Types We can pattern-match against nested data types such as lists of sets and sets and sets.
  41. 41. 41 Pattern Modularization with Lexical Scope We can modularize patterns with pattern-functions, functions that receive patterns and return a pattern.
  42. 42. 42 Pattern Modularization with Lexical Scope A pattern-function has lexical scoping, patterns can be reused in a program without worry of name clash.
  43. 43. 43 Demonstration: Mahjong
  44. 44. 44 Demonstration: Mahjong Two same tiles Three consecutive tiles Three same tiles
  45. 45. 45 Demonstration: Mahjong Two same tiles Three consecutive tiles Three same tiles Seven twins or one twin + four shuntsu or kohtsu
  46. 46. 46 Demonstration: 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!
  47. 47. 47 Play with Egison
  48. 48. 48 Collections
  49. 49. 49 Infinite Collections
  50. 50. 50 Pattern Matching against Infinite Collections Pattern matching against an infinite collection
  51. 51. 51 Twin Prime Code on Homepage of Egison
  52. 52. 52 Current Status
  53. 53. 53 Egison Website
  54. 54. 54 Online Tutorial
  55. 55. 55 Online Demonstrations
  56. 56. 56 Egison on an Online Media
  57. 57. 57 Egison on Hacker News Egison was actively discussed on Hacker News twice!
  58. 58. 58 Egison Article on CodeIQ MAGAZINE
  59. 59. 59 Egison will be Taught at the University of Tokyo by Prof. Hagiya Egison will have a big impact on the academic world, too!
  60. 60. 60 Access Map of the Website in Last Half Year (2014/4/23 – 2014/10/23) Total session is 15,228
  61. 61. 61 Growth of Community in This Year (2013/11/15 – 2014/10/25) • Mailing List Members • Before: 12 – Only my friends • Current: 23 – Communicating in English • Stargazers on GitHub • Before: 12 – Only my friends • Current: 242 – People from all over the world!
  62. 62. 62 Extending Other Languages
  63. 63. 63 Poker Hands Analyzer in Ruby
  64. 64. 64 Public Response to Ruby Extension 10,466 views, 186 Hatena Bookmarks!
  65. 65. 65 RubyKaigi 2014 Recently presented at RubyKaigi 2014!
  66. 66. 66 Future Plans - Applications in the Real World -
  67. 67. 67 Wide Range of Applications • Daily programming • Can express complex tasks simply • Data access and analysis • Work as the most elegant query language • Can access the wide range of data types in a unified way • Natural language processing, Image processing • Can handle complex structures intuitively as humans do in their mind • AI (Mathematical expression handling) • Can handle various mathematical and abstract notions directly
  68. 68. 68 Wide Range of Applications • Daily programming • Can express complex tasks simply • Data access and analysis • Work as the most elegant query language • Can access the wide range of data types in a unified way • Natural language processing, Image processing • Can handle complex structures intuitively as humans do in their mind • AI (Mathematical expression handling) • Can handle various mathematical and abstract notions directly
  69. 69. 69 Ideas of Software • Command line text editor • Command line text editor that uses Egison pattern-matching instead of regular expressions • Chart analytics tool • Find patterns in charts (e.g. technical analysis of the financial markets) • In-memory database with Egison query • Can access the wide range of data types in a unified way • SQL database client • Extract data using simple pattern-matching expressions instead of SQL
  70. 70. 70 Wide Range of Applications • Daily programming • Can express complex tasks simply • Data access and analysis • Work as the most elegant query language • Can access the wide range of data types in a unified way • Natural language processing, Image processing • Can handle complex structures intuitively as humans do in their mind • AI (Mathematical expression handling) • Can handle various mathematical and abstract notions directly
  71. 71. 71 Query Example • Let’s consider a 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
  72. 72. 72 SQL Version • Complex and difficult to understand • Complex where clause contains “NOT EXIST” • Subquery
  73. 73. 73 Egison Version • Very Simple • No where clauses • No subquery
  74. 74. 74 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
  75. 75. 75 GUI Frontend • We can provide GUI for intuitive data access • Data access for even non-engineers • Engineers can concentrate on data analysis
  76. 76. 76 Database in the Next Age In the future, databases will be embedded and hidden in programming languages. We will be able to handle databases directly and easily just as arrays and hashes in existing languages. The pattern-matching of Egison will play a critical role for this future.
  77. 77. 77 Wide Range of Applications • Daily programming • Can express complex tasks simply • Data access and analysis • Work as the most elegant query language • Can access the wide range of data types in a unified way • Natural language processing, Image processing • Can handle complex structures intuitively as humans do in their mind • AI (Mathematical expression handling) • Can handle various mathematical and abstract notions directly
  78. 78. 78 Wide Range of Applications • Daily programming • Can express complex tasks simply • Data access and analysis • Work as the most elegant query language • Can 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 • Can handle complex structures intuitively as humans do in their mind • AI (Mathematical expression handling) • Can handle various mathematical and abstract notions directly
  79. 79. 79 My Mind Map on Programming Language
  80. 80. 80 My Mind Map on Programming Language
  81. 81. 81 My Mind Map on Programming Language Egison is pioneering this field!
  82. 82. Egison (current) Egison next version 82 Improve Egison as the Programming Language I am aiming to make Egison the perfect programming language. Function modularity Lisp (before Scheme) Scheme ML, OCaml, Haskell Type system Pattern matching Function modularity Type system Pattern matching
  83. 83. Egison (current) Egison next version 83 Improve Egison as the Programming Language I am aiming to make Egison the perfect programming language. Function modularity Lisp (before Scheme) Scheme ML, OCaml, Haskell Type system Pattern matching Function modularity Type system Pattern matching
  84. 84. 84 Thank you! Please visit our website! http://www.egison.org Follow us in Twitter @Egison_Lang Let’s talk and collaborate with us! satoshi.egi@mail.rakuten.com

×