a + b # addition
a+b # addition
a+ b # addition
a +b # a(+b) app
x = (y for y in [1,2]) # x: [1,2]
x = y for y in [1,2] # x: 2
# lambda # lambda
-> false () -> false
// anonymous function
(function(){ return false; });
-> false # lambda
() -> false # lambda
(-> false)(true) # inv
(-> false) true # app
(-> false) () -> true # app
(-> false)() -> true # ???
~~-> false # lambda/~~
~~() -> false # lambda/~~
(-> false)(true) # inv
(-> false) true # app
(-> false) () -> true # app
(-> false)() -> true # ???
-> false # lambda
() -> false # lambda
~~(-> false)(true) # inv/~~
(-> false) true # app
(-> false) () -> true # app
(-> false)() -> true # ???
-> false # lambda
() -> false # lambda
(-> false)(true) # inv
~~(-> false) true # app/~~
(-> false) () -> true # app
(-> false)() -> true # ???
# inv # app
(-> false)(true) (-> false) true
# javascript
(function(){ return false; })(true);
-> false # lambda
() -> false # lambda
(-> false)(true) # inv
(-> false) true # app
~~(-> false) () -> true # app/~~
(-> false)() -> true # ???
-> false # lambda
() -> false # lambda
(-> false)(true) # inv
(-> false) true # app
~~(-> false) (() -> true) # app/~~
(-> false)() -> true # ???
-> false # lambda
() -> false # lambda
(-> false)(true) # inv
(-> false) true # app
~~(-> false) (-> true) # app/~~
(-> false)() -> true # ???
-> false # lambda
() -> false # lambda
(-> false)(true) # inv
(-> false) true # app
~~(-> false) () -> true # app/~~
(-> false)() -> true # ???
-> false # lambda
() -> false # lambda
(-> false)(true) # inv
(-> false) true # app
~~(-> false) () -> true # app/~~
~~(-> false)() -> true # ???/~~
(-> true) () -> false # app
(-> true)() -> false # ???
(-> true) () -> false # app
~~(-> true)() -> false # ???/~~
(-> true) () -> false # app
~~(-> true)()/~~ -> false # ???
(-> true) () -> false # app
~~true/~~ -> false # ???
(-> true) () -> false # app
~~true -> false/~~ # ???
(-> true) () -> false # app
~~true(-> false)~~ # ???
(-> true) () -> false # app
~~(-> true)() -> false # inv, app /~~
(-> true~~)☠(/~~) -> false # app
(-> true~~)(/~~) -> false # inv, app
(-> true) () -> false # app
(-> true)() -> false # inv, app
(-> true~~)☠(/~~) -> false # app
(-> true~~)(/~~) -> false # inv, app
1) kitten → sitten [s/k]
2) sitten → sittin [i/e]
3) sittin → sitting [+g]
# S1 length: 21
(-> true) () -> false
# S2 length: 20
(-> true)() -> false
(-> true) () -> false # app
(-> true)() -> false # inv, app
(-> true~~)☀(/~~) -> false # app
(-> true~~)(/~~) -> false # inv, app
(-> true)() # => true
(-> launch(); true)() # => true; !!
# coffeeScript
(-> true)()
# tokenized
'(', '->', ' ', 'true', ')', '()'
-- abstract form
(Invoke (Lambda BooleanExpr True))
~~# coffeeScript/~~
~~(-> true)()/~~
# tokenized
'(', '->', ' ', 'true', ')', '()'
-- abstract form
(Invoke (Lambda BooleanExpr True))
# coffeeScript
(-> true)()
~~# tokenized/~~
~~'(', '->', ' ', 'true', ')', '()'/~~
-- abstract form
(Invoke (Lambda BooleanExpr True))
Exp : Value { $1 }
| Lambda '()' { Invoke $1 }
Lambda : '()' _ '->' _ Exp { Lambda $5 }
| '->' _ Exp { Lambda $3 }
| '(' Lambda ')' { $2 }
# tokenized
'(', '->', ' ', 'true', ')', '()'
Exp : Value { $1 }
| Lambda '()' { Invoke $1 }
Lambda : '()' _ '->' _ Exp { Lambda $5 }
| ~~'->' _ Exp { Lambda $3 }/~~
| '(' Lambda ')' { $2 }
# tokenized
'(', ~~'->', ' ', 'true'/~~, ')', '()'
Exp : Value { $1 }
| Lambda '()' { Invoke $1 }
Lambda : '()' _ '->' _ Exp { Lambda $5 }
| '->' _ Exp { Lambda $3 }
| ~~'(' Lambda ')' { $2 }/~~
# tokenized
~~'(', '->', ' ', 'true', ')'/~~, '()'
Exp : Value { $1 }
| ~~Lambda '()' { Invoke $1 }/~~
Lambda : '()' _ '->' _ Exp { Lambda $5 }
| '->' _ Exp { Lambda $3 }
| '(' Lambda ')' { $2 }
# tokenized
~~'(', '->', ' ', 'true', ')', '()'/~~
# coffeeScript
(-> true)()
# tokenized
'(', '->', ' ', 'true', ')', '()'
~~-- abstract form
(Invoke (Lambda BooleanExpr True))/~~
(-> true) () -> false # app
(-> true)() -> false # inv, app
-- (-> true)☠() -> false
(Apply
(Lambda (BooleanExpr True))
(Lambda (BooleanExpr False)))
-- (-> true)() -> false
(Apply
(Invoke (Lambda (BooleanExpr True)))
(Lambda (BooleanExpr False)))
(-> true) # lambda form 1
(() -> true) # lambda form 2
-- (-> true)
-- (() -> true)
Lambda (BooleanExpr True)
(-> true) # lambda form 1
(() -> true) # lambda form 2
(-> true) # lambda form 1
(~~()/~~ -> true) # lambda form 2
-- (-> true)☠() -> false
(Apply
(Lambda (BooleanExpr True))
(Lambda (BooleanExpr False)))
~~-- (-> true)☠() -> false/~~
(Apply
~~(Lambda (BooleanExpr True))/~~
(Lambda (BooleanExpr False)))
~~-- (-> true)() -> false/~~
(Apply
~~(Invoke (Lambda (BooleanExpr True)))/~~
(Lambda (BooleanExpr False)))
(-> false)() # invocation
(-> true) true # app
(-> (-> true))() true # both
# t1 t2
(-> false) (-> true)()
# t2 → t2'
true
# t1 t2 → t1 t2'
(-> false) true
~~# t1 t2/~~
~~(-> false) (-> true)()/~~
# t2 → t2'
true
# t1 t2 → t1 t2'
(-> false) true
# t1 t2
(-> false) (-> true)()
~~# t2 → t2'/~~
~~true/~~
# t1 t2 → t1 t2'
(-> false) true
# t1 t2
(-> false) (-> true)()
# t2 → t2'
true
~~# t1 t2 → t1 t2'/~~
~~(-> false) true/~~
# t v
(-> (-> false))() true
# t → t'
(-> false)
# t v → t' v
(-> false) true
~~# t v/~~
~~(-> (-> false))() true/~~
# t → t'
(-> false)
# t v → t' v
(-> false) true
# t v
(-> (-> false))() true
~~# t → t'/~~
~~(-> false)/~~
# t v → t' v
(-> false) true
# t v
(-> (-> false))() true
# t → t'
(-> false)
~~# t v → t' v/~~
~~(-> false) true/~~
(-> false)() # invocation
(-> (-> true))() true
true # value
(-> true) # lambda
(-> true)() # invoke
(-> true) false # apply bool
(-> true) -> true # apply lambda
(-> true) () -> true # apply lambda
~~true # value/~~
(-> true) # lambda
(-> true)() # invoke
(-> true) false # apply bool
(-> true) -> true # apply lambda
(-> true) () -> true # apply lambda
~~true # value/~~
~~(-> true) # lambda/~~
(-> true)() # invoke
(-> true) false # apply bool
(-> true) -> true # apply lambda
(-> true) () -> true # apply lambda
~~true # value/~~
~~(-> true) # lambda/~~
~~(-> true)() # invoke/~~
(-> true) false # apply bool
(-> true) -> true # apply lambda
(-> true) () -> true # apply lambda
~~true # value/~~
~~(-> true) # lambda/~~
~~(-> true)() # invoke/~~
~~(-> true) false # apply bool/~~
(-> true) -> true # apply lambda
(-> true) () -> true # apply lambda
~~true # value/~~
~~(-> true) # lambda/~~
~~(-> true)() # invoke/~~
~~(-> true) false # apply bool/~~
~~(-> true) -> true # apply lambda/~~
(-> true) () -> true # apply lambda
~~true # value/~~
~~(-> true) # lambda/~~
~~(-> true)() # invoke/~~
~~(-> true) false # apply bool/~~
~~(-> true) -> true # apply lambda/~~
~~(-> true) () -> true # apply lambda/~~
(-> true)() # invoke
(-> true)() # invoke
(-> true)() # invoke
(-> true)() # invoke
(x, y) -> x * y # mult
(x, y) -> x + y # add
(x, y) -> x ~~*/~~ y # mult
(x, y) -> x ~~+/~~ y # add