Successfully reported this slideshow.
Upcoming SlideShare
×

# Ruby Egison

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.

• Full Name
Comment goes here.

Are you sure you want to Yes No

### 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]…