1-4. とりあえずコードを書いてみよう! (2)

本格的にHaskellの勉強を始める前に、Haskellで書かれたごく簡単なコードを見てみましょう。 見た目はC言語で書かれたコードとわりあい似通っていますが、 細かく見てみると変なところもいくつか見つかります。 サンプルコードを追いながらその違いを味わってみましょう。今回は第2弾!

Haskellのコードはこんな感じ(再掲)

前回に引き続きサンプルコードについて解説していきます。 前回掲載したコードを再掲します。

					
square x = x * x		-- xの平方を返却する関数

main = do
	x <- readLn			-- xの値を入力
	putStr $ square x	-- xの平方を計算して出力
					
				

入出力の関数を見てみよう!

さて、do 以下を見てみると、入力には関数 readLn が、 出力には関数 putStr が使われています。

「あれ? x = readLn じゃないの?」という疑問がわきますね。 しかしそれではコンパイルエラーが起きてしまいます。 なぜなら readLn の返却値の型はIntではなく「アクション」だからです。 と言われてもいまいちピンときません。

詳しくはまた今度説明することにして、 とりあえず「アクション」を返す入出力関数に対しては、 '=' ではなく '<-' を使う、と覚えておきましょう。

'$'って何じゃい!

さて、2つ目の式を見てみましょう。 putStrsquare 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の魅力をさらにどんどん深掘りしていきます。 それではお楽しみに!

前ページへ> <目次へ戻る