プログラミングHaskell (第二章の練習問題)

in

プログラミングHaskell 第二章練習問題。(Hugsを用いて実行はghc v6.10.4です)このあたりはまだ、余裕があります。(^^)

2.6 (1) 括弧をつけよ

-- 2^3*4
a=(2^3)*4
-- 2*3+4*5
b=(2*3)+(4*5)
-- 2+3*4^5
c=2+(3*(4^5))

2.6 (2) Hugsを用いて実行せよ。

*Main>: a
32
*Main> b
26
*Main> c
3074
*Main> d

2.6 (3) エラーを修正しHugsで実行せよ

-- 関数名が大文字
-- divを囲むのはバッククウォート
-- a/xsのカラムが揃っていない
n :: Int
n = a `div` length xs
  where
    a = 10
    xs = [1,2,3,4,5]

*Main> n
10

2.6 (4) この章で紹介したライブラリ関数を使って空でないリストの最後の要素を取り出すlastを定義せよ。さらに他の定義も考えよ

last1 :: [a] -> a
last1 xs = head (reverse xs)
last2 :: [a] -> a
last2 xs = xs!!(length xs - 1 )

2.6 (5) 同様に空でないリストから最後の要素を取り除くinit関数を二通りの方法で定義できることを示せ

init1 :: [a] -> [a]
init1 xs = take (length xs-1) xs
init2 :: [a] -> [a]
init2 xs = reverse (drop 1 (reverse xs))

模範解答では、(5)のinitは

init xs	=  reverse (tail (reverse xs))

でした。ん、やっぱり最後の要素を取り除くという意味では、drop 1よりtailの方が明瞭ですね。後、カラム位置に関してはエディタのタブに注意。僕はvim+expandtabでやってます。

添付サイズ
ex2.hs474 bytes

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/348

Comments