最初の一歩〜48時間でSchemeを書こう

  • 最初のファイル "file1.hs"
module Main where
import System.Environment

main :: IO ()
main = do
    args <- getArgs
    putStrLn ("Hello, " ++ args !! 0)
ghc -o hello --make file1.hs
./hello r
  • 第二のファイル file1_1.hs
module Main where
import System.Environment

main :: IO ()
main = do
    args <- getArgs
    putStrLn ("Hello, " ++ args !! 0 ++ " " ++ args !! 1)
ghc -o hello2 --make file1_1.hs
./hello2 r y
  • 標準入力を整数として受け取って計算したりする "file1_2.hs"
    • argsは、文字列のリスト
    • これをreadすると何かしらのタイプに変えられる
    • mapをかけることですべての引数をそれぞれ何かしらのタイプに変え、そのリストを得る
    • そのタイプが変わったリストに関数 sum を適用すると、sumが働くべきタイプに変えるべきであることが伝わり、そのようにできる
    • sum関数が返す数値タイプの結果をshowで文字列に戻し標準出力する
  • コメントアウトしているいろいろな処理も可能。letを使うこともできる。関数mydoubleを定義してそれを使うこともできる
module Main where
import System.Environment
import System.IO

mydouble :: Integral a => a -> a
mydouble x = x * 2


main :: IO ()
main = do
    args <- getArgs
    putStrLn $ show $ sum $map read args
    --arg <- readLn :: IO Int
    --let arg = read (args !! 0) :: Int
    --let arg2 = read (args !! 1) :: Int
    --let num = mydouble arg
    --let num = arg + arg2
    --putStrLn $ (show arg) ++ " is doubled, then, " ++ (show num) ++ " ."
    --putStrLn $ (show arg) ++ " + " ++ (show arg2) ++ " = " ++ (show num) ++ " ."
ghc -o calc --make file1_2.hs
./calc 3 5