Slideshare.net (beta)

 

All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 1 (more)

From Javascript To Haskell

From ujihisa, 7 months ago

Kanasan.JS - JS#2

1332 views  |  0 comments  |  1 favorite  |  15 downloads
Embed
options

More Info

This slideshow is Public
Total Views: 1332
on Slideshare: 1332
from embeds: 0

Slideshow transcript

Slide 1: JavaScript Haskell 2008-01-24 UJIHISA, Tatsuhiro

Slide 2: who's this? • ujihisa • Osaka Univ. M2 • Fuzzy Rough Sets • nayutaya - http://www.nayutaya.co.jp • LiveCoding, ldev, Haskell, On Lisp...

Slide 3: from js to hs

Slide 4: Ruby natural class-based OO prototype-based JavaScript OO, functional Haskell simple functional

Slide 5: simplicity • process serially • assignment • loop • implicit cast

Slide 6: simplicity • process serially • assignment • loop • implicit cast

Slide 7: no variables var a = 1; var b = function() { return 1 }; a = 1 b = 1

Slide 8: no re-assignment var a = 1; var a = 2; a = 1 a = 2 -- Multiple declarations of `Main.a'

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

Slide 10: principle

Slide 11: write less code • principle: as possible as you should write less code • development, maintenance, ...always.

Slide 12: notation

Slide 13: aaa(bbb("hahaha", 3))); aaa (bbb "hahaha" 3) aaa $ bbb "hahaha" 3

Slide 14: window.addEventListener( "load", function() { alert("a") }) main = putStrLn "a"

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

Slide 16: var f = function(a) { var g = function(b) {...}; return g(a); }; f a = g a where g b = ...

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

Slide 18: (function(a) { return a + 1 }) (function(a) { return a + 1 })(3) //=> 4 (a -> a + 1) (a -> a + 1) 3 -- 4

Slide 19: a + b (+) a b add a b a `add` b

Slide 21: List Processing Haskell vs JavaScript with prototype.js

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

Slide 23: [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

Slide 24: $R(1, 10).toArray() //=> [1, 2, ..., 10] $R(1, Infinity).toArray() //... [1..10] [1..]

Slide 25: head [1..] -- 1 head tail [1..] -- 2 [1..] !! 10 -- 11

Slide 26: curry

Slide 27: var f = function(a) { return function(b) { return function(c) { return a + b + c }}}; f(3)(5)(7) //=> 15 f a b c = a + b + c f 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

Slide 28: f a b = a + b f a b = (+) a b f = (+) addOne a = 1 + a addOne a = (+) 1 a addOne = (+) 1 addOne = (1 +) map (1 +) [1, 2, 3]

Slide 29: list comprehension

Slide 30: tmp = []; [1, 2].each(function(x) { [10, 20].each(function(y) { tmp.push(x + y) }) }); [ x + y | x <- [1, 2], y <- [10, 20]] {x + y|x ∈ X, y ∈ Y }

Slide 31: tmp = []; $R(1, Infinity).each(function(x) { if (x % 2 == 0 && x < 10) { tmp.push(x) } }); [ x | x <- [1..], x `mod` 2 == 0, x < 10] {x|x ∈ N, x ≡ 0 mod 2, x < 10}

Slide 32: fib again h (+) fib (tail fib) fib = 1 : 1 : zipWit

Slide 33: how to use • sudo port install ghc • HotMac :-) • runghc a.hs • ghc a.hs && ./a.out • ghci

Slide 34: for what? • draft • step up • production

Slide 35: Monadius

Slide 36: HSP

Slide 37: Haskell Scheme Prolog

Slide 38: • lazy evaluation • monad • type inference

Slide 39: thank you!