SlideShare une entreprise Scribd logo
1  sur  61
Haskell

?
1 public class Counter {
2
3     private int count = 0;
4
5     /**
6      *            .
 7       * @param value
 8       * @return
 9       */
10     public int up(int value) {
11          count += value;
12          return count;
13     }
14 }
1 public class Counter {
2
3     private int count = 0;
4
5     /**
6      *            .
 7       * @param value
 8       * @return
 9       */
10     public int up(int value) {
11          count += value;
12          return count;
13     }
14 }
1 import java.util.Scanner;
 2
 3 public class IOSample {
 4
 5   public static void main(String[] args) {
 6
 7     Scanner scan = new Scanner(System.in);
 8
 9     System.out.println("        ");
10       String str = scan.next(); //
11       System.out.println("           "+ str);
12   }
13 }


                        (         )
1 import java.util.Scanner;
 2
 3 public class IOSample {
 4
 5   public static void main(String[] args) {
 6
 7     Scanner scan = new Scanner(System.in);
 8
 9     System.out.println("        ");
10       String str = scan.next(); //
11       System.out.println("           "+ str);
12   }
13 }


                        (         )
Haskell
Concurrent Clean



     OCaml            Erlang
     Scala         Lisp(Scheme)
       F#
What's faster than C++, more concise than Perl,
more regular than Python, more flexible than Ruby,
more typeful than C#, more robust than Java,
and has absolutely nothing in common with PHP?
It's Haskell!
                            -- Autrijus Tang(    )
C++             Perl

Python                 Ruby

C#                            Java

PHP

Haskell
1   cond :: Bool
 2   cond = True
 3
 4   price :: Int
 5   price = 2800
 6
 7   pi :: Float
 8   pi = 3.141592653589793
 9
10   greeting :: String
11   greeting = "Hello, Haskell!"
12
13   letter :: Char
14   letter = 'C'
‘A’       ‘B’       ‘C’      ‘D’

1 bools = [True, False, True] :: [Bool]
2
3 -- "ABCD"
4 letters = ['A', 'B', 'C', 'D'] :: [Char]
5
6 --
7 empty = [] :: [Int]
8
9 --                1
10 notEmpty = [[]] :: [[Float]]
1 --
2 (False, 'A') :: (Bool, Char)
3
4 --        (          )
5 ("Name", True, 123) :: (String, Bool, Int)
6
7 --
 8 ('a', (False, 'b')) :: (Char, (Bool, Char))
 9
10 --
11 (['a', 'b', ‘c’], [False, True]) :: ([Char], [Bool])
12
13 --
14 [('a', False), ('b', True)] :: [(Char, Bool)]
1   double :: Int -> Int
2   double x = x + x
3
4   add :: (Int, Int) -> Int
5   add (x, y) = x + y
6
7   mult :: Int -> Int -> Int -> Int
8   mult x y z = x * y * z

> double 3
6
> add (1, 7)
8
> mult 7 8 9
504
1   add :: (Int, Int) -> Int
 2   add (x, y) = x + y
 3
 4   -- Int -> (Int -> Int)
                                   Haskell
 5   add' :: Int -> Int -> Int
 6   add' x y = x + y                        1
 7
 8   mult10 :: Int -> Int -> Int
 9   mult10 = mult 10
10
11   mult30 :: Int -> Int
12   mult30 = mult 10 3

> mult10 3 8
240
> mult30 5
150
1   twice :: (Int -> Int) -> Int -> Int
2   twice f x = f (f x)
3                                     Int
4   isDigit :: Char -> Bool
                                        Int
5   isDigit c = c >= '0' && c <= '9'
6
7   -- map :: (a -> b) -> [a] -> [b]

> twice (*2) 3
12
> map (+1) [1, 2, 3, 4]
[2, 3, 4, 5]
> map isDigit ['a', '0', 'b', '9']
[False, True, False, True]
> length [1, 3, 5, 7]
4
> length [True, False]
2
> length [length, length, length]
3


length :: [a] -> Int
map :: (a -> b) -> [a] -> [b]
> 1 + 2
3
> (*) 1.1 2.3        -- 1.1 * 2.3
2.53
> 10 `div` 2         -- div 10 2
5

 1   (+)      ::   Num   a   =>   a   ->   a -> a
 2   (*)      ::   Num   a   =>   a   ->   a -> a
 3   negate   ::   Num   a   =>   a   ->   a
 4   abs      ::   Num   a   =>   a   ->   a
1 --              (     Ord, Show, Read     )
2 class Eq a where
3    (==) :: a -> a -> Bool
4    (/=) :: a -> a -> Bool
5
6 --    MyType Eq
7 instance Eq MyType where
8   (MyType a) == (MyType a') = (a == a')
1 --          [λxy. x+y]
2   add x y = x + y
3   add' = x -> (y -> x + y)
4   add'' = x y -> x + y
5
6   --
7 -- const x y = x
 8 const :: a -> (b -> a)
 9 const x = _ -> x
10
11 --
> map (x -> x * 2 + 1) [1, 3, 5, 7]
[3, 7, 11, 15]
> [x^2 | x <- [1..5]]
[1,4,9,16,25]

> [(x, y) | x <- [1,2,3], y <- [4,5]]
[(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)]

1 --
2 factors :: Int -> [Int]
3 factors n = [x | x <- [1..n], n `mod` x == 0]
4 --
5 primes :: Int -> [Int]
6 primes n = [x | x <- [2..n], factors x == [1, x]]

> factors 100
[1,2,4,5,10,20,25,50,100]

> primes 50
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47]
1 --
2   factorial :: Int -> Int
3   factorial 0 = 1
4   factorial n = n * factorial (n - 1)
5
6   --
7 product :: Num a => [a] -> a
8 product []     = 1
9 product (n:ns) = n * product ns

    1        2        3        4
    1:[2,3,4]                  4:[]
1 qsort :: Ord a => [a] -> [a]
2 qsort []     = []
3 qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger
4     where
5         smaller = [a|a <- xs, a <= x]
6         larger = [a|a <- xs, a > x]

> qsort [100, 23, 37, 3, 55, 68, 49]
[3,23,37,49,55,68,100]
1   even :: Int -> Bool     even 4
2   even 0 = True          = {even       }
3   even n = odd (n - 1)
                            odd 3
4                          = {odd    }
5   odd :: Int -> Bool
                            even 2
6   odd 0 = False          = {even       }
7   odd n = even (n - 1)
                            odd 1
                           = {odd    }
> even 4
                            even 0
True                       = {even       }
> odd 4
                            True
False
1 --                                   !
2   summary :: [Integer] -> Integer
3   summary []     = 0
4   summary (n:ns) = n + summary ns
5
6   --               (         )
 7 summary' :: [Integer] -> Integer
 8 summary' xs = f xs 0
 9   where
10     f [] sum     = sum
11     f (y:ys) sum = f ys (y + sum)
mult (x, y) = x * y
         ?       > mult (1+2, 2+3)
                                           ?
 mult (1+2, 2+3)              mult (1+2, 2+3)
= {     +     }              = {mult     }
 mult (3, 2+3)                (1+2) * (2+3)
= {+     }                   = {     +     }
 mult (3, 5)                  3 * (2+3)
= {mult     }                = {+     }
 3 * 5                        3 * 5
= {*         }               = {*      }
 15                           15
inf :: Int
                  inf = 1 + inf



 fst (0, inf)               fst (0, inf)
= {inf     }               = {fst     }
 fst (0, 1+inf)             0
= {inf     }
 fst (0, 1+(1+inf))
= {inf     }
 fst (0, 1+(1+(1+inf)))
= {inf     }
         !!
1 ones :: [Int]
 2 ones = 1 : ones
 3
 4 --                       (                )
 5   sieve :: [Int] -> [Int]
 6   sieve (p:xs) = p : sieve [x|x <- xs, x `mod` p /= 0]
 7
 8   primes :: [Int]
 9   primes = sieve [2..]        head ones
                                = {head          ones   }
> head ones                  head (1:ones)
1                           = {head     }
> take 10 primes             1
[2,3,5,7,11,13,17,19,23,29]
Mac OS X 10.7.1
tarai :: Int -> Int -> Int -> Int
                                           1.8 GHz Intel Core i7
tarai x y z
                                           4 GB 1333 MHz DDR3
  | x <= y = y
  | otherwise = tarai (tarai (x-1) y z)
                                           > tarai 16 10 0
                      (tarai (y-1) z x)
                                           16
                      (tarai (z-1) x y)
                             Haskell

private int tarai(int x, int y, int z) {
                                                 :107039ms
  if (x <= y) {
    return y;                                    :45,722,185,221
  } else {
    return tarai(tarai(x-1, y, z),
                 tarai(y-1, z, x),
                 tarai(z-1, x, y));
  }
}                              Java
Monad
Haskell
     (※   )
6 -- set1                    set2
 7   translate   :: String -> String ->   Char -> Char
 8   translate   []     _      c = c
 9   translate   (x:xs) []     c = if x   == c then ' ' else translate xs [] c
10   translate   (x:xs) [y]    c = if x   == c then y else translate xs [y] c
11   translate   (x:xs) (y:ys) c = if x   == c then y else translate xs ys c
12
13   --
14   translateString :: String -> String -> String -> String
15   translateString set1 set2 str = map (translate set1 set2) str
16
17   usage :: IOError -> IO ()
18   usage e = do putStrLn "Usage: ex14 set1 set2"
19                putStrLn "Translates characters in set1 on stdin to the corresponding"
20                putStrLn "characters from set2 and writes the translation to stdout."
21
22   --
23 main :: IO    ()
24 main = (do    [set1,set2] <- getArgs
25               contents    <- hGetContents stdin
26               putStr $ translateString set1 set2 contents) `catchError` usage
6 -- set1                    set2
 7   translate   :: String -> String ->   Char -> Char
 8   translate   []     _      c = c
 9   translate   (x:xs) []     c = if x   == c then ' ' else translate xs [] c
10   translate   (x:xs) [y]    c = if x   == c then y else translate xs [y] c
11   translate   (x:xs) (y:ys) c = if x   == c then y else translate xs ys c
12
13   --
14   translateString :: String -> String -> String -> String
15   translateString set1 set2 str = map (translate set1 set2) str
16
17   usage :: IOError -> IO ()
18   usage e = do putStrLn "Usage: ex14 set1 set2"
19                putStrLn "Translates characters in set1 on stdin to the corresponding"
20                putStrLn "characters from set2 and writes the translation to stdout."
21
22   --
23 main :: IO    ()
24 main = (do    [set1,set2] <- getArgs
25               contents    <- hGetContents stdin
26               putStr $ translateString set1 set2 contents) `catchError` usage
Monad
1   class Monad m where
 2     (>>=) :: m a -> (a -> m b) -> m b
 3     return :: a -> m a
 4
 5   -- data Bool = False | True
 6   data Maybe a = Nothing | Just a
 7
 8   instance Monad Maybe where
 9     return         = Just                  (         )
10     fail           = Nothing
11     Nothing >>= f = Nothing         Just       Nothing
12     (Just x) >>= f = f x             1

                                              Maybe Int
lookup :: Eq a => a -> [(a, b)] -> Maybe b

players = [(6, "Nakata"), (11, "Darvish"), (41, "Inaba")]

> lookup 11 players
Just "Darvish"

> lookup 212 players
Nothing
1 pacific = [("Fs", [(6, "Nakata"), (11, "Darvish"), (41, "Inaba")]),
2            ("SH", [(3, "Matsunaka"), (21, "Wada"), (47, "Sugiuchi")]),
3            ("Es", [(18, "Tanaka"), (21, "Iwakuma"), (32, "Matsui")])]
4
5 lookupName :: String -> Int -> Maybe String
6 lookupName t n = case (lookup t pacific) of
7                    Just players -> lookup n players
8                    Nothing      -> Nothing

> lookupName "Fs" 41
Just "Inaba"




                                                  …
--             (    )
class Monad m where
  (>>=) :: m a -> (a -> m b) -> m b
  return :: a -> m a

instance Monad Maybe where
  return         = Just
  fail           = Nothing
  Nothing >>= f = Nothing
  (Just x) >>= f = f x


     Nothing                      Maybe       Nothing
                   >>=   Int ->       ?   =

      Just                        Maybe       Maybe
      Int          >>=   Int ->       ?   =     ?
1   pacific = [("Fs", [(6, "Nakata"), (11, "Darvish"), (41, "Inaba")]),
 2              ("SH", [(3, "Matsunaka"), (21, "Wada"), (47, "Sugiuchi")]),
 3              ("Es", [(18, "Tanaka"), (21, "Iwakuma"), (32, "Matsui")])]
 4
 5   lookupName :: String -> Int -> Maybe String
 6   lookupName t n = case (lookup t pacific) of
 7                      Just players -> lookup n players
 8                      Nothing      -> Nothing
 9
10   lookupName' t n = lookup t pacific >>= lookup n

> lookupName' "Es" 18
Just "Tanaka"                                          [(Int, b)] -> Maybe b

> lookupName' "Fs" 18
Nothing                           Maybe [(Int, String)]

> lookupName' "DH" 21
Nothing
                             --
                             (>>=) :: m a -> (a -> m b) -> m b
                             lookup :: Eq a => a -> [(a, b)] -> Maybe b
Maybe                Maybe                Maybe                Mayb
 a      >>=   a ->    b      >>=   b ->    c      >>=   c ->    d
IO()     String -> IO()


main = putStrLn "Hello, World!"

main = let a = putStrLn "Hello" in (a >> a)



 IO a
IO String    String -> IO()

main = getContents >>= putStrLn

 IO        IO                   IO
()    =   Str    >>=   Str ->   ()
Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語

Contenu connexe

Tendances

Fixing the Java Serialization Mess
Fixing the Java Serialization Mess Fixing the Java Serialization Mess
Fixing the Java Serialization Mess
Salesforce Engineering
 
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Christian Schneider
 
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do InteriorPrimeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
Zabbix BR
 

Tendances (20)

RedisConf18 - Introducing RediSearch Aggregations
RedisConf18 - Introducing RediSearch AggregationsRedisConf18 - Introducing RediSearch Aggregations
RedisConf18 - Introducing RediSearch Aggregations
 
Non-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithmNon-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithm
 
さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2
 
初學者都該了解的 HTTP 通訊協定基礎
初學者都該了解的 HTTP 通訊協定基礎初學者都該了解的 HTTP 通訊協定基礎
初學者都該了解的 HTTP 通訊協定基礎
 
Part II: LLVM Intermediate Representation
Part II: LLVM Intermediate RepresentationPart II: LLVM Intermediate Representation
Part II: LLVM Intermediate Representation
 
TDOH x 台科 pwn課程
TDOH x 台科 pwn課程TDOH x 台科 pwn課程
TDOH x 台科 pwn課程
 
Regular Expressions
Regular ExpressionsRegular Expressions
Regular Expressions
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
Using Kamailio for Scalability and Security
Using Kamailio for Scalability and SecurityUsing Kamailio for Scalability and Security
Using Kamailio for Scalability and Security
 
Fixing the Java Serialization Mess
Fixing the Java Serialization Mess Fixing the Java Serialization Mess
Fixing the Java Serialization Mess
 
Binary Reading in C#
Binary Reading in C#Binary Reading in C#
Binary Reading in C#
 
An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...
 
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
 
Введение в программирование (1 часть)
Введение в программирование (1 часть)Введение в программирование (1 часть)
Введение в программирование (1 часть)
 
MongoDB World 2019: Tips and Tricks++ for Querying and Indexing MongoDB
MongoDB World 2019: Tips and Tricks++ for Querying and Indexing MongoDBMongoDB World 2019: Tips and Tricks++ for Querying and Indexing MongoDB
MongoDB World 2019: Tips and Tricks++ for Querying and Indexing MongoDB
 
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfukLaravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
 
ZIO Queue
ZIO QueueZIO Queue
ZIO Queue
 
Data Types In PHP
Data Types In PHPData Types In PHP
Data Types In PHP
 
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do InteriorPrimeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
 
Rust
RustRust
Rust
 

En vedette

Fun with Social, Windows 8 and Javascript
Fun with Social, Windows 8 and JavascriptFun with Social, Windows 8 and Javascript
Fun with Social, Windows 8 and Javascript
Joris Poelmans
 
Building your first Windows Phone 7 application for SharePoint
Building your first Windows Phone 7 application for SharePointBuilding your first Windows Phone 7 application for SharePoint
Building your first Windows Phone 7 application for SharePoint
Joris Poelmans
 
Everything you always wanted to know about SharePoint 2013 Search relevance
Everything you always wanted to know about SharePoint 2013 Search relevanceEverything you always wanted to know about SharePoint 2013 Search relevance
Everything you always wanted to know about SharePoint 2013 Search relevance
Joris Poelmans
 
Intro to MUI and variations in SharePoint 2010
Intro to MUI and variations in SharePoint 2010Intro to MUI and variations in SharePoint 2010
Intro to MUI and variations in SharePoint 2010
Joris Poelmans
 
Apps for Office Introduction
Apps for Office IntroductionApps for Office Introduction
Apps for Office Introduction
Joris Poelmans
 
Yammer Social Data Mining
Yammer Social Data MiningYammer Social Data Mining
Yammer Social Data Mining
Joris Poelmans
 
Building search-driven Windows 8 and Windows Phone 8 apps for SharePoint Serv...
Building search-driven Windows 8 and Windows Phone 8 apps for SharePoint Serv...Building search-driven Windows 8 and Windows Phone 8 apps for SharePoint Serv...
Building search-driven Windows 8 and Windows Phone 8 apps for SharePoint Serv...
Joris Poelmans
 
Claim Based Authentication in SharePoint 2010 for Community Day 2011
Claim Based Authentication in SharePoint 2010 for Community Day 2011Claim Based Authentication in SharePoint 2010 for Community Day 2011
Claim Based Authentication in SharePoint 2010 for Community Day 2011
Joris Poelmans
 
The future of business process apps - a Microsoft perspective
The future of business process apps - a Microsoft perspectiveThe future of business process apps - a Microsoft perspective
The future of business process apps - a Microsoft perspective
Joris Poelmans
 
Exploring search driven applications with SharePoint 2013
Exploring search driven applications with SharePoint 2013Exploring search driven applications with SharePoint 2013
Exploring search driven applications with SharePoint 2013
Joris Poelmans
 

En vedette (16)

Petrobras cascade-chinook
Petrobras cascade-chinookPetrobras cascade-chinook
Petrobras cascade-chinook
 
5分で分かるgitのrefspec
5分で分かるgitのrefspec5分で分かるgitのrefspec
5分で分かるgitのrefspec
 
JavaScriptの落とし穴
JavaScriptの落とし穴JavaScriptの落とし穴
JavaScriptの落とし穴
 
Fun with Social, Windows 8 and Javascript
Fun with Social, Windows 8 and JavascriptFun with Social, Windows 8 and Javascript
Fun with Social, Windows 8 and Javascript
 
Building your first Windows Phone 7 application for SharePoint
Building your first Windows Phone 7 application for SharePointBuilding your first Windows Phone 7 application for SharePoint
Building your first Windows Phone 7 application for SharePoint
 
The Connected Company - Event Anders Vergaderen
The Connected Company - Event Anders VergaderenThe Connected Company - Event Anders Vergaderen
The Connected Company - Event Anders Vergaderen
 
Everything you always wanted to know about SharePoint 2013 Search relevance
Everything you always wanted to know about SharePoint 2013 Search relevanceEverything you always wanted to know about SharePoint 2013 Search relevance
Everything you always wanted to know about SharePoint 2013 Search relevance
 
Intro to MUI and variations in SharePoint 2010
Intro to MUI and variations in SharePoint 2010Intro to MUI and variations in SharePoint 2010
Intro to MUI and variations in SharePoint 2010
 
Apps for Office Introduction
Apps for Office IntroductionApps for Office Introduction
Apps for Office Introduction
 
Yammer Social Data Mining
Yammer Social Data MiningYammer Social Data Mining
Yammer Social Data Mining
 
Building search-driven Windows 8 and Windows Phone 8 apps for SharePoint Serv...
Building search-driven Windows 8 and Windows Phone 8 apps for SharePoint Serv...Building search-driven Windows 8 and Windows Phone 8 apps for SharePoint Serv...
Building search-driven Windows 8 and Windows Phone 8 apps for SharePoint Serv...
 
Claim Based Authentication in SharePoint 2010 for Community Day 2011
Claim Based Authentication in SharePoint 2010 for Community Day 2011Claim Based Authentication in SharePoint 2010 for Community Day 2011
Claim Based Authentication in SharePoint 2010 for Community Day 2011
 
The future of business process apps - a Microsoft perspective
The future of business process apps - a Microsoft perspectiveThe future of business process apps - a Microsoft perspective
The future of business process apps - a Microsoft perspective
 
Exploring search driven applications with SharePoint 2013
Exploring search driven applications with SharePoint 2013Exploring search driven applications with SharePoint 2013
Exploring search driven applications with SharePoint 2013
 
What’s new on the Microsoft Azure Data Platform
What’s new on the Microsoft Azure Data Platform What’s new on the Microsoft Azure Data Platform
What’s new on the Microsoft Azure Data Platform
 
SharePoint Server 2013 : The big five
SharePoint Server 2013 : The big fiveSharePoint Server 2013 : The big five
SharePoint Server 2013 : The big five
 

Similaire à Haskellで学ぶ関数型言語

関数潮流(Function Tendency)
関数潮流(Function Tendency)関数潮流(Function Tendency)
関数潮流(Function Tendency)
riue
 
Useful javascript
Useful javascriptUseful javascript
Useful javascript
Lei Kang
 

Similaire à Haskellで学ぶ関数型言語 (20)

関数潮流(Function Tendency)
関数潮流(Function Tendency)関数潮流(Function Tendency)
関数潮流(Function Tendency)
 
Useful javascript
Useful javascriptUseful javascript
Useful javascript
 
Артём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data AnalysisАртём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data Analysis
 
Vcs16
Vcs16Vcs16
Vcs16
 
Scala kansai summit-2016
Scala kansai summit-2016Scala kansai summit-2016
Scala kansai summit-2016
 
Brief tour of psp-std
Brief tour of psp-stdBrief tour of psp-std
Brief tour of psp-std
 
Python 1 liners
Python 1 linersPython 1 liners
Python 1 liners
 
C Code and the Art of Obfuscation
C Code and the Art of ObfuscationC Code and the Art of Obfuscation
C Code and the Art of Obfuscation
 
Monadologie
MonadologieMonadologie
Monadologie
 
Christian Gill ''Functional programming for the people''
Christian Gill ''Functional programming for the people''Christian Gill ''Functional programming for the people''
Christian Gill ''Functional programming for the people''
 
Python 101 language features and functional programming
Python 101 language features and functional programmingPython 101 language features and functional programming
Python 101 language features and functional programming
 
関数プログラミングことはじめ revival
関数プログラミングことはじめ revival関数プログラミングことはじめ revival
関数プログラミングことはじめ revival
 
Elm: give it a try
Elm: give it a tryElm: give it a try
Elm: give it a try
 
Oh Composable World!
Oh Composable World!Oh Composable World!
Oh Composable World!
 
QA Auotmation Java programs,theory
QA Auotmation Java programs,theory QA Auotmation Java programs,theory
QA Auotmation Java programs,theory
 
Introducción a Elixir
Introducción a ElixirIntroducción a Elixir
Introducción a Elixir
 
Seminar PSU 10.10.2014 mme
Seminar PSU 10.10.2014 mmeSeminar PSU 10.10.2014 mme
Seminar PSU 10.10.2014 mme
 
Python Tidbits
Python TidbitsPython Tidbits
Python Tidbits
 
Perl6 one-liners
Perl6 one-linersPerl6 one-liners
Perl6 one-liners
 
R programming language
R programming languageR programming language
R programming language
 

Dernier

Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in DelhiRussian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
kauryashika82
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
QucHHunhnh
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
PECB
 

Dernier (20)

Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in DelhiRussian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
 
social pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajansocial pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajan
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3
 
Class 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfClass 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdf
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdf
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writing
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpin
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across Sectors
 

Haskellで学ぶ関数型言語

  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7. ?
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. 1 public class Counter { 2 3 private int count = 0; 4 5 /** 6 * . 7 * @param value 8 * @return 9 */ 10 public int up(int value) { 11 count += value; 12 return count; 13 } 14 }
  • 13. 1 public class Counter { 2 3 private int count = 0; 4 5 /** 6 * . 7 * @param value 8 * @return 9 */ 10 public int up(int value) { 11 count += value; 12 return count; 13 } 14 }
  • 14. 1 import java.util.Scanner; 2 3 public class IOSample { 4 5 public static void main(String[] args) { 6 7 Scanner scan = new Scanner(System.in); 8 9 System.out.println(" "); 10 String str = scan.next(); // 11 System.out.println(" "+ str); 12 } 13 } ( )
  • 15. 1 import java.util.Scanner; 2 3 public class IOSample { 4 5 public static void main(String[] args) { 6 7 Scanner scan = new Scanner(System.in); 8 9 System.out.println(" "); 10 String str = scan.next(); // 11 System.out.println(" "+ str); 12 } 13 } ( )
  • 16. Haskell Concurrent Clean OCaml Erlang Scala Lisp(Scheme) F#
  • 17.
  • 18.
  • 19. What's faster than C++, more concise than Perl, more regular than Python, more flexible than Ruby, more typeful than C#, more robust than Java, and has absolutely nothing in common with PHP? It's Haskell! -- Autrijus Tang( ) C++ Perl Python Ruby C# Java PHP Haskell
  • 20.
  • 21. 1 cond :: Bool 2 cond = True 3 4 price :: Int 5 price = 2800 6 7 pi :: Float 8 pi = 3.141592653589793 9 10 greeting :: String 11 greeting = "Hello, Haskell!" 12 13 letter :: Char 14 letter = 'C'
  • 22. ‘A’ ‘B’ ‘C’ ‘D’ 1 bools = [True, False, True] :: [Bool] 2 3 -- "ABCD" 4 letters = ['A', 'B', 'C', 'D'] :: [Char] 5 6 -- 7 empty = [] :: [Int] 8 9 -- 1 10 notEmpty = [[]] :: [[Float]]
  • 23. 1 -- 2 (False, 'A') :: (Bool, Char) 3 4 -- ( ) 5 ("Name", True, 123) :: (String, Bool, Int) 6 7 -- 8 ('a', (False, 'b')) :: (Char, (Bool, Char)) 9 10 -- 11 (['a', 'b', ‘c’], [False, True]) :: ([Char], [Bool]) 12 13 -- 14 [('a', False), ('b', True)] :: [(Char, Bool)]
  • 24. 1 double :: Int -> Int 2 double x = x + x 3 4 add :: (Int, Int) -> Int 5 add (x, y) = x + y 6 7 mult :: Int -> Int -> Int -> Int 8 mult x y z = x * y * z > double 3 6 > add (1, 7) 8 > mult 7 8 9 504
  • 25. 1 add :: (Int, Int) -> Int 2 add (x, y) = x + y 3 4 -- Int -> (Int -> Int) Haskell 5 add' :: Int -> Int -> Int 6 add' x y = x + y 1 7 8 mult10 :: Int -> Int -> Int 9 mult10 = mult 10 10 11 mult30 :: Int -> Int 12 mult30 = mult 10 3 > mult10 3 8 240 > mult30 5 150
  • 26. 1 twice :: (Int -> Int) -> Int -> Int 2 twice f x = f (f x) 3 Int 4 isDigit :: Char -> Bool Int 5 isDigit c = c >= '0' && c <= '9' 6 7 -- map :: (a -> b) -> [a] -> [b] > twice (*2) 3 12 > map (+1) [1, 2, 3, 4] [2, 3, 4, 5] > map isDigit ['a', '0', 'b', '9'] [False, True, False, True]
  • 27. > length [1, 3, 5, 7] 4 > length [True, False] 2 > length [length, length, length] 3 length :: [a] -> Int map :: (a -> b) -> [a] -> [b]
  • 28. > 1 + 2 3 > (*) 1.1 2.3 -- 1.1 * 2.3 2.53 > 10 `div` 2 -- div 10 2 5 1 (+) :: Num a => a -> a -> a 2 (*) :: Num a => a -> a -> a 3 negate :: Num a => a -> a 4 abs :: Num a => a -> a
  • 29. 1 -- ( Ord, Show, Read ) 2 class Eq a where 3 (==) :: a -> a -> Bool 4 (/=) :: a -> a -> Bool 5 6 -- MyType Eq 7 instance Eq MyType where 8 (MyType a) == (MyType a') = (a == a')
  • 30. 1 -- [λxy. x+y] 2 add x y = x + y 3 add' = x -> (y -> x + y) 4 add'' = x y -> x + y 5 6 -- 7 -- const x y = x 8 const :: a -> (b -> a) 9 const x = _ -> x 10 11 -- > map (x -> x * 2 + 1) [1, 3, 5, 7] [3, 7, 11, 15]
  • 31. > [x^2 | x <- [1..5]] [1,4,9,16,25] > [(x, y) | x <- [1,2,3], y <- [4,5]] [(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)] 1 -- 2 factors :: Int -> [Int] 3 factors n = [x | x <- [1..n], n `mod` x == 0] 4 -- 5 primes :: Int -> [Int] 6 primes n = [x | x <- [2..n], factors x == [1, x]] > factors 100 [1,2,4,5,10,20,25,50,100] > primes 50 [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47]
  • 32. 1 -- 2 factorial :: Int -> Int 3 factorial 0 = 1 4 factorial n = n * factorial (n - 1) 5 6 -- 7 product :: Num a => [a] -> a 8 product [] = 1 9 product (n:ns) = n * product ns 1 2 3 4 1:[2,3,4] 4:[]
  • 33. 1 qsort :: Ord a => [a] -> [a] 2 qsort [] = [] 3 qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger 4 where 5 smaller = [a|a <- xs, a <= x] 6 larger = [a|a <- xs, a > x] > qsort [100, 23, 37, 3, 55, 68, 49] [3,23,37,49,55,68,100]
  • 34. 1 even :: Int -> Bool even 4 2 even 0 = True = {even } 3 even n = odd (n - 1) odd 3 4 = {odd } 5 odd :: Int -> Bool even 2 6 odd 0 = False = {even } 7 odd n = even (n - 1) odd 1 = {odd } > even 4 even 0 True = {even } > odd 4 True False
  • 35.
  • 36. 1 -- ! 2 summary :: [Integer] -> Integer 3 summary [] = 0 4 summary (n:ns) = n + summary ns 5 6 -- ( ) 7 summary' :: [Integer] -> Integer 8 summary' xs = f xs 0 9 where 10 f [] sum = sum 11 f (y:ys) sum = f ys (y + sum)
  • 37. mult (x, y) = x * y ? > mult (1+2, 2+3) ? mult (1+2, 2+3) mult (1+2, 2+3) = { + } = {mult } mult (3, 2+3) (1+2) * (2+3) = {+ } = { + } mult (3, 5) 3 * (2+3) = {mult } = {+ } 3 * 5 3 * 5 = {* } = {* } 15 15
  • 38. inf :: Int inf = 1 + inf fst (0, inf) fst (0, inf) = {inf } = {fst } fst (0, 1+inf) 0 = {inf } fst (0, 1+(1+inf)) = {inf } fst (0, 1+(1+(1+inf))) = {inf } !!
  • 39. 1 ones :: [Int] 2 ones = 1 : ones 3 4 -- ( ) 5 sieve :: [Int] -> [Int] 6 sieve (p:xs) = p : sieve [x|x <- xs, x `mod` p /= 0] 7 8 primes :: [Int] 9 primes = sieve [2..] head ones = {head ones } > head ones head (1:ones) 1 = {head } > take 10 primes 1 [2,3,5,7,11,13,17,19,23,29]
  • 40. Mac OS X 10.7.1 tarai :: Int -> Int -> Int -> Int 1.8 GHz Intel Core i7 tarai x y z 4 GB 1333 MHz DDR3 | x <= y = y | otherwise = tarai (tarai (x-1) y z) > tarai 16 10 0 (tarai (y-1) z x) 16 (tarai (z-1) x y) Haskell private int tarai(int x, int y, int z) { :107039ms if (x <= y) { return y; :45,722,185,221 } else { return tarai(tarai(x-1, y, z), tarai(y-1, z, x), tarai(z-1, x, y)); } } Java
  • 41. Monad
  • 42. Haskell (※ )
  • 43.
  • 44.
  • 45.
  • 46.
  • 47. 6 -- set1 set2 7 translate :: String -> String -> Char -> Char 8 translate [] _ c = c 9 translate (x:xs) [] c = if x == c then ' ' else translate xs [] c 10 translate (x:xs) [y] c = if x == c then y else translate xs [y] c 11 translate (x:xs) (y:ys) c = if x == c then y else translate xs ys c 12 13 -- 14 translateString :: String -> String -> String -> String 15 translateString set1 set2 str = map (translate set1 set2) str 16 17 usage :: IOError -> IO () 18 usage e = do putStrLn "Usage: ex14 set1 set2" 19 putStrLn "Translates characters in set1 on stdin to the corresponding" 20 putStrLn "characters from set2 and writes the translation to stdout." 21 22 -- 23 main :: IO () 24 main = (do [set1,set2] <- getArgs 25 contents <- hGetContents stdin 26 putStr $ translateString set1 set2 contents) `catchError` usage
  • 48. 6 -- set1 set2 7 translate :: String -> String -> Char -> Char 8 translate [] _ c = c 9 translate (x:xs) [] c = if x == c then ' ' else translate xs [] c 10 translate (x:xs) [y] c = if x == c then y else translate xs [y] c 11 translate (x:xs) (y:ys) c = if x == c then y else translate xs ys c 12 13 -- 14 translateString :: String -> String -> String -> String 15 translateString set1 set2 str = map (translate set1 set2) str 16 17 usage :: IOError -> IO () 18 usage e = do putStrLn "Usage: ex14 set1 set2" 19 putStrLn "Translates characters in set1 on stdin to the corresponding" 20 putStrLn "characters from set2 and writes the translation to stdout." 21 22 -- 23 main :: IO () 24 main = (do [set1,set2] <- getArgs 25 contents <- hGetContents stdin 26 putStr $ translateString set1 set2 contents) `catchError` usage
  • 49. Monad
  • 50. 1 class Monad m where 2 (>>=) :: m a -> (a -> m b) -> m b 3 return :: a -> m a 4 5 -- data Bool = False | True 6 data Maybe a = Nothing | Just a 7 8 instance Monad Maybe where 9 return = Just ( ) 10 fail = Nothing 11 Nothing >>= f = Nothing Just Nothing 12 (Just x) >>= f = f x 1 Maybe Int
  • 51. lookup :: Eq a => a -> [(a, b)] -> Maybe b players = [(6, "Nakata"), (11, "Darvish"), (41, "Inaba")] > lookup 11 players Just "Darvish" > lookup 212 players Nothing
  • 52. 1 pacific = [("Fs", [(6, "Nakata"), (11, "Darvish"), (41, "Inaba")]), 2 ("SH", [(3, "Matsunaka"), (21, "Wada"), (47, "Sugiuchi")]), 3 ("Es", [(18, "Tanaka"), (21, "Iwakuma"), (32, "Matsui")])] 4 5 lookupName :: String -> Int -> Maybe String 6 lookupName t n = case (lookup t pacific) of 7 Just players -> lookup n players 8 Nothing -> Nothing > lookupName "Fs" 41 Just "Inaba" …
  • 53. -- ( ) class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a instance Monad Maybe where return = Just fail = Nothing Nothing >>= f = Nothing (Just x) >>= f = f x Nothing Maybe Nothing >>= Int -> ? = Just Maybe Maybe Int >>= Int -> ? = ?
  • 54. 1 pacific = [("Fs", [(6, "Nakata"), (11, "Darvish"), (41, "Inaba")]), 2 ("SH", [(3, "Matsunaka"), (21, "Wada"), (47, "Sugiuchi")]), 3 ("Es", [(18, "Tanaka"), (21, "Iwakuma"), (32, "Matsui")])] 4 5 lookupName :: String -> Int -> Maybe String 6 lookupName t n = case (lookup t pacific) of 7 Just players -> lookup n players 8 Nothing -> Nothing 9 10 lookupName' t n = lookup t pacific >>= lookup n > lookupName' "Es" 18 Just "Tanaka" [(Int, b)] -> Maybe b > lookupName' "Fs" 18 Nothing Maybe [(Int, String)] > lookupName' "DH" 21 Nothing -- (>>=) :: m a -> (a -> m b) -> m b lookup :: Eq a => a -> [(a, b)] -> Maybe b
  • 55. Maybe Maybe Maybe Mayb a >>= a -> b >>= b -> c >>= c -> d
  • 56. IO() String -> IO() main = putStrLn "Hello, World!" main = let a = putStrLn "Hello" in (a >> a) IO a
  • 57. IO String String -> IO() main = getContents >>= putStrLn IO IO IO () = Str >>= Str -> ()

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n