Upcoming SlideShare
×

# 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
5 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

Views
Total views
22,377
On SlideShare
0
From Embeds
0
Number of Embeds
19,750
Actions
Shares
0
27
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.