Hatena::Grouphaskell

(200) Days of Haskell - Ruby 厨だけどハスケルやるよ

2011-09-27

(2) フィボナッチ数列を求める

| 18:30

を写経。

fib.hs

import System

fib 0 = 1
fib 1 = 1
fib n = fib' n 1 1

fib' 1 _ y = y
fib' n x y = fib' (n - 1) y (x + y)

main = do
  args <- getArgs
  print $ fib $ read $ args !! 0

基本的な関数、記号の意味が分からない……

  • !! - 配列から要素を取り出す
Prelude> ['1', '2'] !! 0
'1'
Prelude> read "2"

<interactive>:1:1:
    Ambiguous type variable `a0' in the constraint:
      (Read a0) arising from a use of `read'
    Probable fix: add a type signature that fixes these type variable(s)
    In the expression: read "2"
    In an equation for `it': it = read "2"

Prelude> read "2" :: Int
2

推論できなさそうな時は、 :: Int のように型を指定する必要がある。

getArgs とかはそのまんまなんだろうね~

2011-09-26

(1) Haskell 処理系の最新版を入れる

| 19:51

200 日間、何でもいいから Haskell のことを書く企画です。

インストール手順

普通にaptから入れると、Ubuntu natty, Debian squeeze などでは少し古い処理系が入るので、今回手動でインストールします。 sid, oneric ではaptで最新のものが入ってくるようです。fedoraとかはよく分かりませんがビルド手順は一緒そう。

wget http://haskell.org/ghc/dist/7.0.3/ghc-7.0.3-x86_64-unknown-linux.tar.bz2
tar xjf ghc-7.0.3-x86_64-unknown-linux.tar.bz2
cd ghc-7.0.3/
./configure
sudo make install
cd ..

GLUT が無かったよ、と言われたので入れておく。でも使うのか……?


sudo aptitude install libglut3-dev
wget http://lambda.galois.com/hp-tmp/2011.2.0.1/haskell-platform-2011.2.0.1.tar.gz
tar xzf haskell-platform-2011.2.0.1.tar.gz
haskell-platform-2011.2.0.1/
./configure
make
sudo make install

潔く /usr/local 以下に入れています。

ghc --version
  The Glorious Glasgow Haskell Compilation System, version 7.0.3
cabal --version
  cabal-install version 0.10.2
  using version 1.10.1.0 of the Cabal library
Prelude> let fact n = if n <= 0 then 1 else n * fact (n - 1)
Prelude> fact 1
1
Prelude> fact 12
479001600
Prelude> fact 12 / fact 11
12.0
Prelude> :quit
Leaving GHCi.

それにしても、はてな記法久しぶり過ぎて慣れない……。