Friday 2 August 2013

Haskell 入門! (2)

Haskell 入門企画,第2回.
今回は変数にちょっと触ってみるとか,ソースファイルをどう書くか,とか.
en.wikibooks の Haskell から,CC-BY-SA での配布です.



Variables and functions
前回は単にその場所で計算しっぱなしやったけど,これは不便よね.
というわけでそういうのは value をもつ variable に保存されます.例えば半径5の円の面積
ghci>3.1416 * 5^2
78.53999999999999
#これghci>ってなってるけどたとえば Prelude> でやっていい.
やけど,いちいち打ち込むのはあんまりです.
この場合すでに pi っていう variable が define されてて,
ghci> pi
3.141592653589793
ghci> pi * 5^2
78.53981633974483
善哉.
この辺りで最後に表示されるのは結局,式とか函数を評価していって最後に値がひとつ残った時にそれを表示,ということが行われてます.
なお Haskell に変数はない,という言い方も多い(値を "束縛" することはあっても,それを変化させられないから)けど,
ここではとりあえず variable と呼んでおきます.なんかもう全部(数学で言う)関数みたいなもん,みたい.

Haskell source files

ではでは僕らも変数を定義してみよう.と,いうところで…
Prelude> r = 3
と何も考えずにやると
Prelude> r = 3

<interactive>:9:1: parse error on input '='
怒られました.このあたりが python のインタープリタと根本的に違うところ,かなあ.
これを回避するには
Prelude> let r = 3
とやれば良く,以降もたまに使いますが,基本的には以下でやる通り,
ソースファイルを作って読み込んでもらって interacitve にいろいろやっていく
のがとりあえずは吉です.
とりあえずこのあたりは一旦置いといて.変数定義はソースファイルから読み込んでやりましょう.
Varfun.hs をつくる(Haskell の場合拡張子は .hs が普通みたい).
r = 5.0
Haskell さん,こう見えて whitespace sensitive なので行頭にスペースは入れないように.
なお = 前後のスペースはどうでも良い模様.
で,これを GHCi から読み込むときには:cdで cd して :load:lで読み込む.
Prelude> :load Varfun.hs 
[1 of 1] Compiling Main             ( Varfun.hs, interpreted )
Ok, modules loaded: Main.
*Main> r
5.0
という感じですね.Tab 補完も効く模様.
使いたいファイルがひとつなら ghci を起動するときに引数として渡してやってもよいようだ.
$ ghci Varfun.hs
GHCi, version 7.6.2: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( varfun.hs, interpreted )
Ok, modules loaded: Main.
*Main> 
変数名は小文字の英字で始めねばならず,残りは文字,数字,underscore (_), tick (') を使用できます.
他の言語なら myfoo みたいな付け方をする場合には foo' とか使うのもいいかもしれません.
そして,本来なら Haskell さんは静的型付け言語なのですが,型推論をやってくれるので今は無指定で大丈夫です.
(python みたいに動的型付けなのではなくて,向こうが適切に推論して型を振ってくれる,ということ).
もうちょっと書き足してみよう.エディタからVarfun.hsを編集
r = 5
area = pi*r^2
で ghci から :reload:rで読み込み(引数は不要).
こんなかんじになるはず
*Main> :r
[1 of 1] Compiling Main             ( Varfun.hs, interpreted )
Ok, modules loaded: Main.
*Main> area
78.53981633974483
*Main> area / r^2
3.141592653589793
*Main> 
めでたし.
こうしてファイルから ghci に読み込むのじゃなくて, ghc でコンパイルすることも(もちろん)できます.
そのへんもまたそのうちに.そのうちにっていうか
$ ghc foo.hs
でいいんですけどね.main 関数書かないといけないとかそういうのがあるので.

Comments

Haskell のコメントは -- に続けて書く(LaTeX の %, python の # 相当).
x = 5     -- The variable x is 5.
-- y = 7
行の最後まで続かないの,あるいは複数行に渡るのは{- comments -}.
 x = {- Don't do this just because you can. -} 5 


というあたりできょうはここまで.
明日はとうとう Haskell が関数型言語としての一面を発揮します.

No comments:

Post a Comment