2

Similar documents
org/ghc/ Windows Linux RPM 3.2 GHCi GHC gcc javac ghc GHCi(ghci) GHCi Prelude> GHCi :load file :l file :also file :a file :reload :r :type expr :t exp

Copyright c 2006 Zhenjiang Hu, All Right Reserved.

haskell.gby

presen.gby

Functional Programming

3 3.1 algebraic datatype data k = 1 1,1... 1,n1 2 2,1... 2,n2... m m,1... m,nm 1 m m m,1,..., m,nm m 1, 2,..., k 1 data Foo x y = Alice x [y] B

2

fp.gby

kyoto.gby

Parametric Polymorphism

bdd.gby


monad.gby

連載 構文解析器結合子 山下伸夫 (( 株 ) タイムインターメディア ) 文字列の分解 1 1 Haskell lines Prelude lines :: String -> [String] lines "" = [] lines s = let (l,s'

¥×¥í¥°¥é¥ß¥ó¥°±é½¬I Exercise on Programming I [1zh] ` `%%%`#`&12_`__~~~ alse

# let st1 = {name = "Taro Yamada"; id = };; val st1 : student = {name="taro Yamada"; id=123456} { 1 = 1 ;...; n = n } # let string_of_student {n

第8回 関数

test.gby

Jacques Garrigue

6-1

jssst-ocaml.mgp

5 IO Haskell return (>>=) Haskell Haskell Haskell 5.1 Util Util (Util: Tiny Imperative Language) 1 UtilErr, UtilST, UtilCont, Haskell C


Microsoft PowerPoint - ProD0107.ppt

4 (induction) (mathematical induction) P P(0) P(x) P(x+1) n P(n) 4.1 (inductive definition) A A (basis ) ( ) A (induction step ) A A (closure ) A clos

(CC Attribution) Lisp 2.1 (Gauche )

導入基礎演習.ppt

Copyright c 2008 Zhenjiang Hu, All Right Reserved.

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1

Functional Programming

r3.dvi

Microsoft PowerPoint - IntroAlgDs-06-8.ppt

0 1 q

K227 Java 2

第12回 モナドパーサ

「計算と論理」 Software Foundations その4

第9回 型とクラス

1. A0 A B A0 A : A1,...,A5 B : B1,...,B

「計算と論理」 Software Foundations その3

Emacs ML let start ::= exp (1) exp ::= (2) fn id exp (3) ::= (4) (5) ::= id (6) const (7) (exp) (8) let val id = exp in

Programming D 1/15

memo

JavaからScalaへ

第10回 モジュール

Prolog Prolog (GNU Prolog) PROLOG (PROgramming in LOGic) 1972 A. Colmerauer LISP Bruce A. Tate 7 7 Ruby, Io, Prolog, Scala, Erlang, Clojure, and Haske

20分でわかる Purely Functional Data Structures

Terminal ocaml $ ocaml Objective Caml version # 1+2;;<ret> # 1+2;; - : int = 3 ;; OCaml <ret> - : int = 3 OC

LIFO(last in first out, ) 1 FIFO(first in first out, ) 2 2 PUSH POP : 1

Condition DAQ condition condition 2 3 XML key value

つくって学ぶプログラミング言語 RubyによるScheme処理系の実装

r08.dvi

r3.dvi

4 ソフトウェア工学 Software Engineering 抽象データ型 ABSTRACT DATA TYPE データ抽象 (data abstraction) 目的 : データ構造を ( 実装に依存せずに ) 抽象的に定義 方法 : データにアクセス (read, write) する関数の仕様

ohp08.dvi

untitled

Boo Boo 2 Boo 2.NET Framework SDK 2 Subversion 2 2 Java 4 NAnt 5 Boo 5 5 Boo if 11 for 11 range 12 break continue 13 pass

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

JavaScript 1.! DOM Ajax Shelley Powers,, JavaScript David Flanagan, JavaScript 2

1 (2 * 3) 1 2 * 3 Preorder In order Post order 1 * 1 * Breadth-first Depth-first * * 3 Preorder: 1 * 2 3 In order: 1 2 * 3 Post orde

1 # include < stdio.h> 2 # include < string.h> 3 4 int main (){ 5 char str [222]; 6 scanf ("%s", str ); 7 int n= strlen ( str ); 8 for ( int i=n -2; i

memo

2 JSON., 2. JSON,, JSON Jaql [9] Spark Streaming [8], Spark [7].,, 2, 3 4, JSON [3], Jaql [9], Spark [7] Spark Streaming [8] JSON JSON [

01_.g.r..

ohp07.dvi

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

r07.dvi

2016select追加小冊子_0704出稿0706修正.indd

ohp07.dvi

ohp02.dvi

untitled

ML Edinburgh LCF ML Curry-Howard ML ( ) ( ) ( ) ( ) 1

javascript key

2

2015-s6-4g-pocket-guidebook_H1-4.indd

O28

34 (2017 ),,.,,,,,.,,,,., [13],.,,,.,. 1,,, [7].,,,,., Leon [8], Synquid [9], SMT CVC4 [10].,., Functional Program Synthesis from Relational Specifica

紀要1444_大扉&目次_初.indd

s

:30 12:00 I. I VI II. III. IV. a d V. VI

1.

untitled

joho07-1.ppt

JavaScript Web Web Web Web Web JavaScript Web Web JavaScript JavaScript JavaScript GC GC GC GC JavaScript SSJSVM GC SSJSVM GC GC GC SSJSVM GC GC SSJSV

tuat1.dvi

連立1次方程式Ax=bの解法:公式にしたがって解くのは,計算量大

MEET 270

( ) ( ) lex LL(1) LL(1)


# let rec sigma (f, n) = # if n = 0 then 0 else f n + sigma (f, n-1);; val sigma : (int -> int) * int -> int = <fun> sigma f n ( : * -> * ) sqsum cbsu

I 2 tutimura/ I 2 p.1/??

VDM-SL VDM VDM-SL Toolbox VDM++ Toolbox 1 VDM-SL VDM++ Web bool

1.3 ( ) ( ) C

endo.PDF


2

untitled

2018 年度前期プロジェクト活動 Ritsumeikan Compiler Construction 班活動報告書 佐々木章徳青木雅典西見元希松本幸大


ScalaFukuoka 2017 Backlog.key

SmartBrowser_document_build30_update.pptx

Transcription:

2011.11.11 1

2

MapReduce 3

4

5

6

Functional Functional Programming 7

8

9

10

11

12

13

[10, 20, 30, 40, 50] 0 n n 10 * 0 + 20 * 1 + 30 * 2 + 40 * 3 + 50 *4 = 400 14

10 * 0 + 20 * 1 + 30 * 2 + 40 * 3 + 50 *4 = 400 for 15

for Douglas Crockford JavaScript: http://www.crockford.com/javascript/javascript.html for JavaScript C JavaScript C Java Lisp Scheme 16

for 17

for for for for for ) for two days for (i = 0; i < N; i++) { } 0 N = - + 1 (N - 1) - 0 + 1 = N 1/3 + 1/3 + 1/3 1 18

JavaScript for function func(ar) { var ret = 0; for (var i=0; i < ar.length; i++) { ret = ret + ar[i]*i; } return ret; } func([10,20,30,40,50]); 400 19

Haskell MapReduce zip [0..] [10,20,30,40,50] [(0,10),(1,20),(2,30),(3,40),(4,50)] map (\(i,x) -> x*i) [0,20,60,120,200] foldl (+) 0 ((((0 + 0) + 20) + 60) + 120) + 200 400 func = foldl (+) 0. map (\(i,x) -> x*i). zip [0..] func [10,20,30,40,50] 400 20

21

22

23

head (car, first) tail (cdr, rest) : (cons) 24

25

-- [1,2,3] -- 1 : 2 : 3 : [] : (cons) -- 1 : (2 : (3 : [])) : a : [ b, o, a, r, d ] [ a, b, o, a, r, d ] head tail sum [] = 0 sum (x:xs) = x + sum xs 26

(1) ++ (append) zs = xs ++ ys ++ 1) 27

(2) ++ O(N) xs ++ (ys ++ zs) ++ O(N^2) (xs ++ ys) ++ zs ++ 2) 28

29

30

factorial(0) = 1 factorial(n) = n * factorial(n - 1) factorial :: Int -> Int -- factorial 0 = 1 -- factorial n = n * factorial (n-1) 31

(C) nobsun 1) factorial n n! 2) factorial (n - 1) 3) n factorial n = n * factorial (n-1) 32

length :: [Int] -> Int length [] = 0 length (x:xs) = 1 + length xs 33

( ) 34

( ) Haskell = (++) :: [a] -> [a] -> [a] [] ++ ys = ys (x:xs) ++ ys = x : (xs ++ ys) {- (++) (x:xs) ys = (:) x (xs ++ ys) -} delay force 35

( ) sum :: Num a => [a] -> a sum [] = 0 sum (x:xs) = x + sum xs {- sum (x:xs) = (+) x (sum xs) -} sum [1,2,3,4] = 1 + sum [2,3,4] = 1 + (2 + sum [3,4]) = 1 + (2 + (3 + sum [4])) = 1 + (2 + (3 + (4 + sum []))) = 1 + (2 + (3 + (4 + 0))) 36

sum :: Num a => [a] -> a sum xs = sum 0 xs where sum r [] = r sum r (y:ys) = sum (y+r) ys sum 0 [1,2,3,4] = sum 1 [2,3,4] = sum 3 [3,4] = sum 6 [4] = sum 10 [] = 10 37

38

MapReduce 39

[1,2,3,4] 1 + (2 + (3 + (4 + 0))) [1,2,3,4] (((0 + 1) + 2) + 3) + 4 40

foldr foldr :: (a -> b -> b) -> b -> [a] -> b foldr _ ini [] = ini foldr op ini (x:xs) = op x (foldr op ini xs) ( ) ++ foldr (++) :: [a] -> [a] -> [a] xs ++ ys = foldr (:) ys xs 41

foldl foldl :: (a -> b -> a) -> a -> [b] -> a foldl _ acc [] = acc foldl op acc (x:xs) = foldl op (op acc x) xs sum foldl sum :: Num a => [a] -> a sum xs = foldl (+) 0 xs 42

map map :: (a -> b) -> [a] -> [b] map _ [] = [] map f (x:xs) = f x : map f xs foldr map :: (a -> b) -> [a] -> [b] map f xs = foldr (\y ys -> f y:ys) [] xs 43

filter filter :: (a -> Bool) -> [a] -> [a] filter _ [] = [] filter prd (x:xs) prd x = x : filter prd xs otherwise = filter pred xs foldr filter :: (a -> Bool) -> [a] -> [a] filter prd xs = foldr filter [] xs where filter y ys prd y = y : ys otherwise = ys 44

45

sumeven :: [Int] -> Int sumeven xs = sumeven xs 0 where sumeven [] r = r sumeven (y:ys) r even y = sumeven ys (y + r) otherwise = sumeven ys r MapReduce sumeven :: [Int] -> Int sumeven xs = foldl (+) 0 (filter even xs) {- sumeven = foldl (+) 0. filter even -} 46

47

48

"String" = [ S, t, r, i, n, g ] 49

"Subject: Hello world " key = "Subject" val = "Hello world" 50

JavaScript var target = "Subject: Hello world "; var x = target.match(/^(\w+):\s*(.*)/); var key = x[1]; var val = x[2].replace(/\s*$/,""); 51

target = "Subject: Hello world " break (== : ) target ("Subject", ": Hello world ") tail (snd ) " Hello world " dropwhile isspace "Hello world " dropwhileend isspace "Hello world" 52

break :: (a -> Bool) -> [a] -> ([a],[a]) break _ [] = ([],[]) break p (x:xs) p x = ([],x:xs) otherwise = (x:ys,zs) where (ys,zs) = break p xs dropwhile :: (a -> Bool) -> [a] -> [a] dropwhile _ [] = [] dropwhile p (x:xs) p x = dropwhile p xs otherwise = x:xs dropwhileend :: (a -> Bool) -> [a] -> [a] dropwhileend p = foldr op [] where op x xs p x && null xs = [] otherwise = x:xs 53

Ask not what your country can do for you, but what you can do for your country. "can do for you" 54

( ) tails tails "banana" ["banana","anana","nana","ana","na","a",""] tails tails :: [a] -> [[a]] tails [] = [[]] tails xs = xs : tails (tail xs) 55

(1) tails "mississippi" ["mississippi","ississippi", "ssissippi","sissippi",... sort ["","i","ippi","issippi", "ississippi","mississippi","pi",... zip (tail ) [("","i"),("i","ippi"), ("ippi","issippi"), ("issippi","ississippi"),... 56

(2) comlen :: Eq a => [a] -> [a] -> Int comlen as bs = comlen as bs 0 where comlen (x:xs) (y:ys) n x == y = comlen xs ys (n+1) comlen n = n lenstr :: Eq a => ([a], [a]) -> (Int,[a]) lenstr (xs,ys) = (len,xs) where len = comlen xs ys 57

(3) [("","i"),("i","ippi"), ("ippi","issippi"), ("issippi","ississippi"),... map lenstr [(0,""),(1,"i"),(1,"ippi"), (4,"issippi"),(0,"ississippi"),... maximumby (comparing fst) (4,"issippi") take (fst ) (snd ) "issi" 58

59

60

data List a = Nil Cons a (List a) data Tree a = Tip Bin a (Tree a) (Tree a) 61

10,000 13 62

(1) preorder :: Tree a -> [a] preorder Tip = [] preorder (Bin x l r) = [x] ++ preorder l ++ preorder r inorder :: Tree a -> [a] inorder Tip = [] inorder (Bin x l r) = inorder l ++ [x] ++ inorder r postorder :: Tree a -> [a] postorder Tip = [] postorder (Bin x l r) = postorder l ++ postorder r ++ [x] 63

(2) preorder :: Tree a -> [a] preorder t = go t [] where go Tip xs = xs go (Bin x l r) xs = x : (go l (go r xs)) inorder :: Tree a -> [a] inorder t = go t [] where go Tip xs = xs go (Bin x l r) xs = go l (x : (go r xs)) postorder :: Tree a -> [a] postorder t = go t [] where go Tip xs = xs go (Bin x l r) xs = go l (go r (x : xs)) 64

65

66

O(1) Finite Map ( ) 67

68

69

= DSL data Parser a = Parser (String -> (Maybe a, String)) char :: Char -> Parser Char char c =... (< >) :: Parser a -> Parser a -> Parser a p1 < > p2 =... 70

JSON BNF (RFC 4627) value = object / array / number / string... JSON value :: Parser JSON value = jsobject < > jsarray < > jsnumber < > jsstring... BNF ( ) 71

72

73

7 7 Scala Erlang Clojure Haskell Scheme Haskell Scala OCaml Purely Functional Data Structure Haskell ( ) 74