Haskellの始め方(3)条件分岐とパターンマッチング

 

 

1.パターンマッチング(case式)

 式の値がパターンにマッチするかしないかを判定する仕組み。

 

getValue defval maybe =
  case maybe of
    Nothing -> defval
    Just x  -> x

main = do
  print (getValue 0 Nothing)   -- 出力: 0
  print (getValue 0 (Just 5))  -- 出力: 5

 

 

Nothing と Just x は maybe型で、

(1) Nothing 値が存在しないとき、

(2) Just x 値xが存在するとき、

使用します。

 

2.ガード(case式)

 パターンの後に、| で、条件式を記述する。

 

max' :: (Ord a) => a -> a -> a
max' a b
    | a <= b =b
    | otherwise =a

 

3.if式

if ... (条件式)then ...(式1) else ...(式2)

と書く。この時、then...else...以下は省略できない。

必ずelse以下も書かなければならないし、式1と式2は型が同じである

必要がある。

 

また、 if b then e1 else e2 という式は、次のcase式に相当する。

 

case b of
  True -> e1
  False -> e2

 

 

後でたぶん大幅に加筆修正する。(ソース例の部分を)

 

 

(参考)

http://walk.northcol.org/haskell/expressions/

https://books.google.co.jp/books/about/%E3%81%99%E3%81%94%E3%81%84Haskell%E3%81%9F%E3%81%AE%E3%81%97%E3%81%8F%E5%AD%A6%E3%81%BC%E3%81%86.html?id=qU7A2leacv4C&printsec=frontcover&source=kp_read_button&redir_esc=y#v=onepage&q=%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3&f=false

Hakellの始め方(2)ソースコードの実行

 昨日は、Haskellの環境を構築するところまで済んでいました。今日は、HaskellのソースファイルをGHCiにロードして、実行する方法を記述していきます。

 

実行するソースは、入力した数の階乗を求める関数です。

ソースコードは、https://stuff.mit.edu/iap/hackhaskell/

https://stuff.mit.edu/iap/hackhaskell/examples/sequence.hsを参考にしました。 

 

factorial :: Integer -> Integer
factorial n = if n < 2 then 1 else n * factorial (n-1)

 

 まずGHCiを起動します。

 

stack exec ghci

 

ソースコードを保存したディレクトリ(ここではdirとする)に移動して、

:cd dir

 

:loadコマンドでソースファイルをロードして、実行する。

 Prelude> :load sequence

 そして、factorialを実行すると、

 

*Main> factorial 10
3628800
*Main> factorial 30
265252859812191058636308480000000

  実行できました。

 

ついでにフィボナッチ関数も実行してみます。

--(定義)
fibo_like :: Integer -> Integer -> [Integer]
fibo_like a b = a : fibo_like b (a+b)

fibonacci, lucas :: [Integer]
fibonacci = fibo_like 0 1
lucas = fibo_like 2 1

*Main> take 15 fibonacci
[0,1,1,2,3,5,8,13,21,34,55,89,144,233,377]

  

Haskellの始め方(1)開発環境構築

 Haskellの環境構築は、少し前までは鬼のように面倒だったらしいですが、今では(2020.06月)始めるだけならとりあえず容易みたいです。末尾の参考文献に詳しいので、知りたい方は、本文を読まずに参考リンクから飛んでください。

 

https://docs.haskellstack.org/en/stable/install_and_upgrade/

から、stackと呼ばれるビルトツールを落としてきます。お使いのOSに対応したものをどうぞ。

解凍して、インストールし終えたら、コマンドプロンプトから、

stack setup

と命令することで、GHCというコンパイラツールがインストールされます。

 

続いて、

stack exec ghci

と打ってやることで、ghci(対話的なHaskellインタプリタ)が立ち上がって、

Hakellを始められるようになります。とりあえず、

 

Prelude> 1+2
3

 

とやってみます。いちたすには、さん。

 

ghciを閉じたくなったら、

 

:quit

 

で閉じます。

 

なぜStackを使うのが好いかというのが知りたければ、

「cabal hell」という単語でググればわかると思います。

 

 

 

(参考)

https://haskell.hatenablog.com/entry/Install-Haskell-with-Stack

https://haskell.e-bigmoon.com/stack/intro/stack-install.html

https://haskell.e-bigmoon.com/stack/intro/index.html