2014年3月6日木曜日

開発環境

Real World Haskell―実戦で学ぶ関数型言語プログラミング(Bryan O'Sullivan (著)、 John Goerzen (著)、 Don Stewart (著)、山下 伸夫 (翻訳)、伊東 勝利 (翻訳)、株式会社タイムインターメディア (翻訳)、オライリージャパン)の12章(バーコード認識)、12.2(配列とは)、練習問題 2.を解いてみる。

その他参考書籍

練習問題 2.

コード(BBEdit, Emacs)

Sample.hs

{-# OPTIONS -Wall -Werror #-}
module Main where

import Data.Array (Array(), (!), listArray)
main :: IO ()
main = do
    print $ f ('a', 'b', 'c', 'd', 'e', 'f') 5
    print $ g (listArray (0, 5) ['a'..]) 5
{--
返す要素の型をaとする。返すのはタプルの要素のいずれかなので、タプルの要素の型は全てa
じゃなければならない。定数時間でランダムアクセスする場合に使えるデータ型の配列が使える
--}
  
f :: (a, a, a, a, a, a) -> Int -> a
f (x, _, _, _, _, _) 0 = x
f (_, x, _, _, _, _) 1 = x
f (_, _, x, _, _, _) 2 = x
f (_, _, _, x, _, _) 3 = x
f (_, _, _, _, x, _) 4 = x
f (_, _, _, _, _, x) 5 = x
f _ _ = undefined

g :: Array Int a -> Int -> a
g xs i | i > 5 = undefined
       | otherwise = xs ! i

入出力結果(Terminal, runghc)

$ runghc Sample.hs
'f'
'f'
$

0 コメント:

コメントを投稿