The Egison Programming Language

22,377 views
22,146 views

Published on

This slide is presented in Tech Talk in Rakuten on March 28, 2014.

Egison is the world's first programming language that realized non-linear pattern-matching with backtracking.
We can directly represent pattern-matching against lists, multisets, sets, trees, graphs and any kind of data types.
Egison makes programming dramatically simple!

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
22,377
On SlideShare
0
From Embeds
0
Number of Embeds
19,750
Actions
Shares
0
Downloads
27
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

The Egison Programming Language

  1. 1. The Egison Programming Language Vol.01 Mar/28/2014 Satoshi Egi Rakuten Institute of Technology http://rit.rakuten.co.jp/
  2. 2. 2 Profile of Egison Paradigm Pattern-matching-oriented, Pure functional Author Satoshi Egi License MIT Version 3.3.4 (2014/03/28) First Released 2011/5/24 Filename Extension .egi Implemented in Haskell (about 3,400 lines) Egison is the programming language I’ve created.
  3. 3. 3 Motivation I’d like to create a programming language that directly represents human’s intuition. Function modularity Type system Pattern matching Egison (current) Egison next version Function modularity Type system Pattern matching Lisp (before Scheme) Scheme ML, OCaml, Haskell
  4. 4. 4 Egison in one minute Egison is the world's first programming language that realized non-linear pattern-matching with backtracking. (match-all xs (multiset integer) [<cons $x <cons ,x _>> x]) Egison Enumerate the elements of the collection ‘xs’ that appear more than twice pairs = [] (1..n).each do |i| (i..n).each do |j| if xs[i] == xs[j] pair = xs[i] end end end Ruby
  5. 5. 5 Quick Tour
  6. 6. 6 The ‘match-all’ expression Target Matcher Pattern Expression executed when pattern matching succeed Result Meaning: Pattern match against the “target” as the “matcher” with the “pattern” and return all results of pattern matching.
  7. 7. 7 The ‘match-all’ expression Target Pattern-match against the target data {1 1 2 3 2}
  8. 8. 8 The ‘match-all’ expression MatcherTarget Pattern-match against the target data {1 1 2 3 2} as the multiset of integers
  9. 9. 9 The ‘match-all’ expression Target Matcher Pattern Pattern-match against the target data {1 1 2 3 2} as the multiset of integers with the pattern <cons $x <cons ,x _>>
  10. 10. 10 The ‘match-all’ expression Target Matcher Pattern Expression executed when pattern matching succeed Pattern-match against the target data {1 1 2 3 2} as the multiset of integers with the pattern <cons $x <cons ,x _>> and return the value bound to x.
  11. 11. 11 The ‘match-all’ expression Target Matcher Pattern Expression executed when pattern matching succeed Result Pattern-match against the target data {1 1 2 3 2} as the multiset of integers with the pattern <cons $x <cons ,x _>> and return the value bound to x.
  12. 12. 12 The ‘cons’ pattern constructor Divide a collection into an element and a collection of rest of elements.
  13. 13. 13 The ‘cons’ pattern constructor The meaning of ‘cons’ changes for each matcher Divide a collection into an element and a collection of rest of elements.
  14. 14. 14 The nested ‘cons’ pattern constructor Extracting two elements using the ‘cons’ patterns.
  15. 15. 15 Non-linear patterns Elements that appear twice Two same head elements We can deal with the multiple occurrences of the same variables in a pattern.
  16. 16. 16 The ‘join’ pattern constructor Divide a collection into two collections.
  17. 17. 17 Playing with the ‘join’ pattern constructor Enumerate all two combination of elements.
  18. 18. 18 Demonstrations
  19. 19. 19 The first application of Egison
  20. 20. 20 The first application of Egison Match as a set of cards
  21. 21. 21 The first application of Egison Pattern for straight flash
  22. 22. 22 The pattern for straight flush
  23. 23. 23 The pattern for straight flush Same suit with $s
  24. 24. 24 The pattern for straight flush Same suit with $s Numbers are serial from $n
  25. 25. 25 The pattern for straight flush Same suit with $s Numbers are serial from $n We can write any expression after ‘,’
  26. 26. 26 The first application of Egison Pattern for two pair
  27. 27. 27 The pattern for two pair
  28. 28. 28 The pattern for two pair Matches with any suit Matches with any card
  29. 29. 29 The pattern for two pair Matches with any suit Matches with any card Same number with $m Same number with $n
  30. 30. 30 The pattern for two pair Matches with any suit Matches with any card Same number with $m Same number with $n Non-linear patterns have very strong power
  31. 31. 31 The first application of Egison Non-linear patterns enables to represent all hands in a single pattern
  32. 32. 32 The first application of Egison Egisonists can write this code in 2 minutes! Non-linear patterns enables to represent all hands in a single pattern
  33. 33. 33 Java version 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; } } } Just finding a pair of cards is already complex. 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
  34. 34. 34 More complex example, Mahjong
  35. 35. 35 More complex example, Mahjong Two same tiles Three consecutive tiles Three same tiles
  36. 36. 36 More complex example, Mahjong Two same tiles Three consecutive tiles Three same tiles Seven twins or one twin + four shuntsu or kohtsu
  37. 37. 37 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!
  38. 38. 38 One More Exciting Demonstration
  39. 39. 39 Collections
  40. 40. 40 Infinite collections
  41. 41. 41 Beautiful example on elementary mathematics Pattern matching against an infinite collection
  42. 42. 42 This sample is on the homepage of Egison
  43. 43. 43 Egison design policy Beautiful and Elegant -> Simple
  44. 44. 44 Visions
  45. 45. 45 What we will be able to do with Egison • Access data in new elegant ways • The most elegant query language • Able to access lists, sets, graphs, trees or any other data in a unified way • Analyze data in new elegant ways • Provide a way to access various algorithm and data structures in a unified way • Implement new interesting applications e.g. • Natural language processing, New programming languages, Mathematical expression handling, Image processing
  46. 46. 46 What we will be able to do with Egison • Access data in new elegant ways • The most elegant query language • Able to access lists, sets, graphs, trees or any other data in a unified way • Analyze data in new elegant ways • Provide a way to access various algorithm and data structures in a unified way • Implement new interesting applications e.g. • Natural language processing, New programming languages, Mathematical expression handling, Image processing Stage1 Stage2
  47. 47. 47 What we will be able to do with Egison • Access data in new elegant ways • The most elegant query language • Able to access lists, sets, graphs, trees or any other data in a unified way • Analyze data in new elegant ways • Provide a way to access various algorithm and data structures in a unified way • Implement new interesting applications e.g. • Natural language processing, New programming languages, Mathematical expression handling, Image processing Stage1 Stage2
  48. 48. 48 Query example • Query that returns twitter users who are followed by “__Egi” but not follow back “__Egi”. id integer name string User: from_id integer to_id Integer Follow:
  49. 49. 49 SQL version • Complex and difficult to understand • Complex where clause contains “NOT EXIST” • Subquery
  50. 50. 50 Egison version • Very Simple • No where clauses • No subquery
  51. 51. 51 Egison version • Very Simple • No where clauses • No subquery Joining 4 tables
  52. 52. 52 Egison version • Very Simple • No where clauses • No subquery Joining 4 tables 1. Get id of “__Egi”
  53. 53. 53 Egison version • Very Simple • No where clauses • No subquery Joining 4 tables 1. Get id of “__Egi” 2. Followed by ‘uid’
  54. 54. 54 Egison version • Very Simple • No where clauses • No subquery Joining 4 tables 1. Get id of “__Egi” 2. Followed by ‘uid’ 3. But not follow backnot
  55. 55. 55 Egison version • Very Simple • No where clauses • No subquery Joining 4 tables 1. Get id of “__Egi” 2. Followed by ‘uid’ 3. But not follow backnot 4. Get name of ‘fid’
  56. 56. 56 Egison version • Very Simple • No where clauses • No subquery Joining 4 tables 1. Get id of “__Egi” 2. Followed by ‘uid’ 3. But not follow backnot 4. Get name of ‘fid’ Return the results
  57. 57. 57 Egison version • Very Simple • No where clauses • No subquery Joining 4 tables 1. Get id of “__Egi” 2. Followed by ‘uid’ 3. But not follow backnot 4. Get name of ‘fid’ Return the results We can run this query against data in SQLite!
  58. 58. 58 GUI frontend • We’ll provide GUI for intuitive data access • Data access for even non-engineers • Engineers can concentrate on data analysis Very Easy!
  59. 59. 59 What we will be able to do with Egison • Access data in new elegant ways • The most elegant query language • Able to access lists, sets, graphs, trees or any other data in a unified way • Analyze data in new elegant ways • Provide a way to access various algorithm and data structures in a unified way • Implement new interesting applications e.g. • Natural language processing, New programming languages, Mathematical expression handling, Image processing Stage1 Stage2
  60. 60. 60 Database in the next age In future, databases will be embedded in programming languages and hidden. We will be able to handle databases directly and easily as arrays and hashes in existing languages. The pattern-matching of Egison will play a necessary role for this future.
  61. 61. 61 The other funny plans • Access data in new elegant ways • The most elegant query language • Able to access lists, sets, graphs, trees or any other data in a unified way • Analyze data in new elegant ways • Provide a way to access various algorithm and data structures in a unified way • Implement new interesting applications e.g. • Natural language processing, New programming languages, Mathematical expression handling, Image processing Stage1 Stage2
  62. 62. 62 Egison has wide range of applications • Data mining • Work as the most elegant query language • Natural Language Processing • Enable to handle complex syntax structures intuitively as humans do in their mind • New Programming Languages • Mathematical expression handling • Enable to handle complex structures easily • Enable to handle various mathematical notion directly Egison is an inevitable and necessary innovation in the history of computer science
  63. 63. 63 The Current Situation
  64. 64. 64 Egison website
  65. 65. 65 Online demonstrations
  66. 66. 66 Installer of Egison and ‘egison-tutorial’ • Egison can be installed on Mac, Windows and Linux. • We’ve prepared a package for Mac • Download it from http://www.egison.org Install me Egison and please try ‘egison-tutorial’! Get following commands! • egison • egison-tutorial
  67. 67. 67 ‘egison-tutorial’ You’ll get Egison easily!
  68. 68. 68 ‘egison-tutorial’ We can try it online, too!
  69. 69. 69 Next Plans
  70. 70. 70 Egison as the programming language Function modularity Type system Pattern matching Egison (current) Egison next version Function modularity Type system Pattern matching Lisp (before Scheme) Scheme ML, OCaml, Haskell Make Egison the perfect programming language.
  71. 71. 71 Extending other languages • Ruby https://github.com/egison/egison-ruby • Python (planning) • Haskell (planning)
  72. 72. 72 Poker hands in Ruby
  73. 73. 73 Database support I appreciate your request for support ! We will extend support for high speed data storages as the backend of Egison.
  74. 74. 74 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

×