ちょっとだけHaskellさわってみた
ghciで実験let fac n = if n == 0 then 1 else n * fac ( n - 1 )fac 10000ちょっともたついたけど普通に計算してくれた
— ゆうなんとか@ジョウト地方さん (@yuu_hara) 2013年5月23日
というわけで前からすごく気になっていたHaskellを少しだけ触ってみました。
まずは環境構築から
たいていのLinuxディストリビューションであればパッケージが用意されているはずなのでそれをインストールすればOKです。よい時代になりましたね。
sudo yum -y install ghc
これで事実上の標準的なHaskellコンパイラGHC(Glasgow Haskell Compiler)がインストールされます。バージョンを確認してみましょう。
ghc --version The Glorious Glasgow Haskell Compilation System, version 7.4.1
Fedora 18(x64)の場合はこのバージョンがインストールされます。
ちなみにこの記事を書いた時点での最新版は7.6.3だそうです。ソースはこちらから。
インタプリタを起動してみる
「ghci」と打ち込むと起動します。
※終了は「:quitと打ち込む」です。\qでもexitでもありませんし、Ctrl+cでも終了しません。
Haskellによる偉大なる例のアレ(Hello World)はこちら。
putStrLn "Hello, World!"
コンパイルしてみる
これをコンパイルして実行するには、
main = putStrLn "Hello, World!"
という中身のファイルを作り、ghcに読ませてやればOKです。Haskellのソースの拡張子は.hsらしいです。
ghc -o hello さっき作ったファイル.hs
./hello
階乗を計算するプログラムが簡潔に書けると聞いて
関数型言語といえばやっぱりこれでしょう*1。冒頭のツイートのやつですね。再掲します。
ghciで実験let fac n = if n == 0 then 1 else n * fac ( n - 1 )fac 10000ちょっともたついたけど普通に計算してくれた
— ゆうなんとか@ジョウト地方さん (@yuu_hara) 2013年5月23日
(10^5)!を計算させてみましたが、1秒くらいで計算してくれました。桁溢れもしなかったのがステキ。(10^6)!も少々時間がかかりましたがちゃんと計算してくれました。とある授業で先生がLISPを使って同じく巨大な数を計算させ、「オーバーフローしないだろう?(ドヤァ」する実験をしてくれましたが、その時と同じくらいの衝撃です。さすがにもうひと桁上げるとPCが死にそうなのでやめておきます。
いつ使おうかな、いつ書こうかな
数値計算は強そうなのですが、普段よく扱っている分野にはどう使っていこうか…ただ、すぐに応用できなくてもこれはこれで結構面白そうなので、まずはARCの簡単な問題で使ってみようかな。
ご本家がWikiを作ってくれている!
10分で学ぶHaskell - HaskellWiki
Haskellについて右も左もわからない私みたいな人はとりあえずここから始めましょう。
*1:あとはフィボナッチ数を求めたりとか。こいつはパターンマッチ使うとよさげかも