Haskellのコードはこんな感じ(再掲)
前回に引き続きサンプルコードについて解説していきます。 前回掲載したコードを再掲します。
square x = x * x -- xの平方を返却する関数
main = do
x <- readLn -- xの値を入力
putStr $ square x -- xの平方を計算して出力
入出力の関数を見てみよう!
さて、do
以下を見てみると、入力には関数 readLn
が、
出力には関数 putStr
が使われています。
「あれ? x = readLn
じゃないの?」という疑問がわきますね。
しかしそれではコンパイルエラーが起きてしまいます。
なぜなら readLn
の返却値の型はIntではなく「アクション」だからです。
と言われてもいまいちピンときません。
詳しくはまた今度説明することにして、
とりあえず「アクション」を返す入出力関数に対しては、
'=
' ではなく '<-
' を使う、と覚えておきましょう。
'$'って何じゃい!
さて、2つ目の式を見てみましょう。
putStr
と square x
の間に '$
'
の記号があります。
これは、'$
' の右側の式はすべて putStr
の引数ですよ、
ということを表しています。
言い換えるなら、'$
' を書くことで
その地点から式の終端までを括弧で囲むのと
同じ効果を持つということになります。つまり...
putStr $ square x
putStr (square x)
-- この2つは同じ意味!
さらに長い式になれば...
func1 :: Char -> IO()
func2 :: String -> Int -> Char
func3 :: Int -> Int
func4 :: String -> Char -> Int
func1 $ func2 "genkatsugi" $ func3 $ func4 "haskell" 'k'
func1 (func2 "genkatsugi" (func3 (func4 "haskell" 'k')))
-- この2つは同じ意味!
おそらく、'$
' を括弧に書き直した後者の式のほうが
わかりやすいと感じるのではないでしょうか。
しかしHaskellに慣れてくると、次第に '$
' を使った前者の式のほうが
すっきりして見やすいと感じるようになるはずです。
コードを読むのに慣れるまでは、 こんな風に括弧を使った式に書き下してみるのがいいでしょう。
ここまでサンプルコードを紐解きながら、Haskellの文法を概観してきました。 少なくともここまでの内容に関しては、難しくてついていけない、 ということはなかったのではないでしょうか?
これで第1章の内容は終わりです。 第2章以降では、Haskellの魅力をさらにどんどん深掘りしていきます。 それではお楽しみに!