Date post: | 03-Jul-2015 |
Category: |
Technology |
Upload: | rakuten-inc |
View: | 2,182 times |
Download: | 4 times |
The Pattern-Matching-Oriented Programming Language Egison
Vol.01 Oct/25/2014 Satoshi Egi Rakuten Institute of Technology http://rit.rakuten.co.jp/
- Express Intuition Directly with Essentially New Syntax -
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
What is Egison?
Egison is a programming language that realizes non-linear pattern-matching even against data that have no standard form.
(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] ! pairs = pairs + ! xs[i] ! end ! end !end !
Ruby
Non-linear patterns allow multiple occurrences of same variables in a pattern
4
Demonstration: Poker Hands
5
Demonstration: Mahjong
Two same tiles
Three consecutive tiles
Three same tiles
Seven twins or one twin + four shuntsu or kohtsu
6
Demonstration: Prime Numbers
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
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
Profile of 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)
Egison is open-source software maintained on GitHub. https://github.com/egison/egison
10
Website – Everything about Egison is Here
11
1. Concept of Egison (15 minutes) 2. Play with Egison (5 minutes) 3. Current Status (5 minutes) 4. Future Plan (5 minutes)
Table of Contents
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 $x $xs>” and return all results of pattern matching.
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-pattern.
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
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
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
Numbers are serial from $n
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
Matches with any suit
Matches with any card
Same number with $m
Same number with $n
34
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
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 all hands in a single pattern
37
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
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 sets and sets.
41
Pattern Modularization with Lexical Scope
We can modularize patterns with pattern-functions, functions that receive patterns and return a pattern.
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
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 shuntsu or kohtsu
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
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 world, too!
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 • Current: 23 – Communicating in English
• Stargazers on GitHub • Before: 12 – Only my friends • Current: 242 – People from all over the world!
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 • 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
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
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
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
Query Example
• Let’s consider a 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:
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 by ‘uid’ 3. But not follow back not 4. Get name of ‘fid’ Return the results
75
GUI Frontend
• We can provide GUI for intuitive data access • Data access for even non-engineers • Engineers can concentrate on data analysis
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
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
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
• Can handle complex structures intuitively as humans do in their mind
• AI (Mathematical expression handling) • Can handle various mathematical and abstract
notions directly
• Programs that find interesting things • Programs that build math theories • Programs that generate programs
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!
82
Improve 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
I am aiming to make Egison the perfect programming language.
83
Improve 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
I am aiming to make Egison the perfect programming language.
84
Thank you!
Please visit our website! http://www.egison.org
Follow us in Twitter @Egison_Lang
Let’s talk and collaborate with us! [email protected]