# Ruby Egison

Rakuten Group, Inc.
Sep. 18, 2014
1 of 80

### 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
• 13. 13 Greeting Demonstration
• 14. 14 Greeting Demonstration
• 15. 15 Greeting Demonstration
• 16. 16 Greeting Demonstration fail
• 17. 17 Greeting Demonstration success
• 18. 18 Greeting Demonstration
• 19. 19 Flow of Pattern Matching fail
• 20. 20 Flow of Pattern Matching success
• 21. 21 Greeting Demonstration
• 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
• 27. 27 Greeting Demonstration
• 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!
• 70. 70 Application of Egison
• 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]…