from javascript to haskell

39
JavaScriptからみた Haskell 2008-01-24 UJIHISA, Tatsuhiro

Upload: ujihisa

Post on 17-Aug-2014

11.176 views

Category:

Economy & Finance


2 download

DESCRIPTION

Kanasan.JS - JS#2

TRANSCRIPT

Page 1: From Javascript To Haskell

JavaScriptからみたHaskell

2008-01-24UJIHISA, Tatsuhiro

Page 2: From Javascript To Haskell

who's this?

•ujihisa

•Osaka Univ. M2

•Fuzzy Rough Sets

•nayutaya - http://www.nayutaya.co.jp

•LiveCoding, ldev, Haskell, On Lisp...

Page 3: From Javascript To Haskell

from js to hs

Page 4: From Javascript To Haskell

Ruby natural class-based OO

JavaScript prototype-based OO, functional

Haskell simple functional

Page 5: From Javascript To Haskell

simplicity

•process serially

•assignment

• loop

• implicit cast

Page 6: From Javascript To Haskell

simplicity

•process serially

•assignment

• loop

• implicit cast

Page 7: From Javascript To Haskell

no variables

var a = 1;var b = function() { return 1 };

a = 1b = 1

Page 8: From Javascript To Haskell

no re-assignment

var a = 1;var a = 2;

a = 1a = 2-- Multiple declarations of `Main.a'

Page 9: From Javascript To Haskell

var f = function() { var i = 0; return function() { return i++; }};var g = f();g(); //=> 0g(); //=> 1g(); //=> 2g(); //=> 3g(); //=> 4

Page 10: From Javascript To Haskell

principle

Page 11: From Javascript To Haskell

write less code

•principle: as possible as you should write less code

•development,maintenance,...always.

Page 12: From Javascript To Haskell

notation

Page 13: From Javascript To Haskell

aaa(bbb("hahaha", 3)));

aaa (bbb "hahaha" 3)

aaa $ bbb "hahaha" 3

Page 14: From Javascript To Haskell

window.addEventListener( "load", function() { alert("a") })

main = putStrLn "a"

Page 15: From Javascript To Haskell

var f = function(a, b) { return a + b};f(8, 7) //=> 15

f a b = a + bf 8 7 -- 15

Page 16: From Javascript To Haskell

var f = function(a) { var g = function(b) {...}; return g(a);};

f a = g a where g b = ...

Page 17: From Javascript To Haskell

var fib = function(n) { return (n == 1) ? 1 : (n == 2) ? 1 : fib(n-2) + fib(n-1);};

fib 1 = 1fib 2 = 1fib n = fib (n-2) + fib (n-1)

Page 18: From Javascript To Haskell

(function(a) { return a + 1 })

(function(a) { return a + 1 })(3)//=> 4

(\a -> a + 1)

(\a -> a + 1) 3 -- 4

Page 19: From Javascript To Haskell

a + b(+) a b

add a ba `add` b

Page 20: From Javascript To Haskell
Page 21: From Javascript To Haskell

List Processing

Haskellvs

JavaScript with prototype.js

Page 22: From Javascript To Haskell

[1, 2, 3].map(function(i) { return i + 1;}) //=> [2, 3, 4]

map (\i -> i + 1) [1, 2, 3]-- [2, 3, 4]

Page 23: From Javascript To Haskell

[1, 2, 3, 4, 5].first() //=> 1[1, 2, 3, 4, 5][3] //=> 4

head [1, 2, 3, 4, 5] -- 1[1, 2, 3, 4, 5] !! 3 -- 4

Page 24: From Javascript To Haskell

$R(1, 10).toArray()//=> [1, 2, ..., 10]

$R(1, Infinity).toArray()//...

[1..10]

[1..]

Page 25: From Javascript To Haskell

head [1..] -- 1head tail [1..] -- 2[1..] !! 10 -- 11

Page 26: From Javascript To Haskell

curry

Page 27: From Javascript To Haskell

f a b c = a + b + cf a b = (\c -> a + b + c)f a = (\b -> (\c -> a + b + c))f = (\a -> (\b -> (\c -> a + b + c)))

f 3 5 7 -- 15

var f = function(a) { return function(b) { return function(c) { return a + b + c }}};f(3)(5)(7) //=> 15

Page 28: From Javascript To Haskell

f a b = a + bf a b = (+) a bf = (+)

addOne a = 1 + aaddOne a = (+) 1 aaddOne = (+) 1addOne = (1 +)

map (1 +) [1, 2, 3]

Page 29: From Javascript To Haskell

list comprehension

Page 30: From Javascript To Haskell

[ x + y | x <- [1, 2], y <- [10, 20]]

tmp = [];[1, 2].each(function(x) { [10, 20].each(function(y) { tmp.push(x + y) })});

{x + y|x ! X, y ! Y }

Page 31: From Javascript To Haskell

[ x | x <- [1..], x `mod` 2 == 0, x < 10]

tmp = [];$R(1, Infinity).each(function(x) { if (x % 2 == 0 && x < 10) { tmp.push(x) }});

{x|x ! N, x " 0 mod 2, x < 10}

Page 32: From Javascript To Haskell

fib again

fib = 1 : 1 : zipWith (+) fib (tail fib)

Page 33: From Javascript To Haskell

how to use

•sudo port install ghc

•HotMac :-)

•runghc a.hs

•ghc a.hs && ./a.out

•ghci

Page 34: From Javascript To Haskell

for what?

•draft

•step up

•production

Page 35: From Javascript To Haskell

Monadius

Page 36: From Javascript To Haskell

HSP

Page 37: From Javascript To Haskell

HaskellSchemeProlog

Page 38: From Javascript To Haskell

•lazy evaluation

•monad

•type inference

Page 39: From Javascript To Haskell

thank you!