2011年07月27日(水)
Haskell のコンパイラとインタプリタ
独習 | |
![]()
Haskell の学習を再開します。
忘れてしまったので復習です。まずは処理系。
以下は 5 の階乗を求めるプログラム。fac.hs*4。
fac 0 = 1 fac n = n * fac (n-1) main = print (fac 5)
コンパイルする。オプションは cc ライク。
$ ghc -o fac fac.hs
実行可能ファイル fac ができるので実行してみる。
$ ./fac 120
Makefile を作っておく。
% : %.hs
ghc -o $@ $<
これで、
$ make fac
で(ソースが更新されていれば)fac がリコンパイルされる。
Ubuntu には hmake というHaskell 用 make のようなパッケージがあった。
インストールして試した。
$ touch fac.hs $ hmake fac ghc -c -o fac.o fac.hs ghc -o fac fac.o
こっちがよさそう。(Makefile のようなものは要りません)
hugs を試す。
$ hugs __ __ __ __ ____ ___ _________________________________________ || || || || || || ||__ Hugs 98: Based on the Haskell 98 standard ||___|| ||__|| ||__|| __|| Copyright (c) 1994-2005 ||---|| ___|| World Wide Web: http://haskell.org/hugs || || Bugs: http://hackage.haskell.org/trac/hugs || || Version: September 2006 _________________________________________ Haskell 98 mode: Restart with command line option -98 to enable extensions Type :? for help Hugs>
husg は起動すると標準ライブラリの Prelude.hs *5 をロードして、標準的な関数を使用できるようにする。
hugs では関数定義ができないらしい。プログラム(のソース)をロードして*6使う。
Hugs> :l fac.hs Main> fac 5 120
できた。(^_^)
GHC 付属のインタプリタ ghci では let を使って関数を定義できる。
Prelude> let double x = x * x Prelude> double 10 100
コメント