fugafuga.write

日々のログ

すごいH本 part58

I/O アクションの中で let 使う

let はI/Oアクションの中で普通の値に名前を与えたいときに使う。

import Data.Char

main = do
    putStrLn "Hello, what's your first name?"
    firstName <- getLine
    putStrLn "What's your last name?"
    lastName <- getLine
    let bigFirstName = map toUpper firstName
        bigLastName = map toUpper lastName
    putStrLn $ "Hey " ++ bigFirstName ++ " "
                      ++ bigLastName
                      ++ ", how are you?"

実行

*Main> main
Hello, what's your first name?
john
What's your last name?
mayer
Hey JOHN MAYER, how are you?
  • <- は I/Oアクションの結果に名前を束縛したい時に使う
  • let は 純粋な式に名前を束縛したい時に使う

逆順に表示

入力された単語を逆さまにして表示するプログラムを作る

main = do
    line <- getLine
    if null line
        then return ()
        else do
            putStrLn $ reverseWords line
            main

reverseWords :: String -> String
reverseWords = unwords . map reverse . words

ビルドする

> stack ghc -- --make reverse.hs
[1 of 1] Compiling Main             ( reverse.hs, reverse.o )
Linking reverse ...

実行する

> ./reverse
123456
654321
252525252525
525252525252
reverse
esrever
  1. 入力に対して words を適用、単語のリストを作る
  2. 単語のリストに対してreverseを適用
  3. unwordsでリストを文字列に戻す

Haskell の return は、純粋な値から I/O アクションを作り出すために利用される。 return はプログラムを中断し結果を返すのではなく、値を受け取り箱の中に入れるもの。

所感

インタラクティブなプログラムが動いて感動している。

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

  • 作者: MiranLipovaca
  • 出版社/メーカー: オーム社
  • 発売日: 2017/07/14
  • メディア: Kindle版
  • 購入: 4人 クリック: 9回
  • この商品を含むブログを見る