関数プログラミング入門・一人読書会 (3)
「関数プログラミング入門」の練習問題をやっていきます
- 作者: Richard Bird,山下伸夫
- 出版社/メーカー: オーム社
- 発売日: 2012/10/26
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 28回
- この商品を含むブログ (5件) を見る
今回は1.4.1〜1.4.7
1.4.1
hの型は,
h :: Integer -> Integer -> Integer
fとgの型は f :: Integer -> Integer
,g :: Integer -> (Integer -> Integer)
なので,(・)
の定義に照らすとf・g
は型が整合しない.これを考慮すると,正しいのは
h x = f・(g x)
である
1.4.2
delta
をカリー化した型は
delta :: Float -> Float -> Float -> Float
1.4.3
log' :: Float -> (Float -> Float)
1.4.4
関数の名前をInteg
とすると,まず積分される対象の関数の型は Float -> Float
.よって,
Integ :: (Float -> Float) -> Float -> Float -> Float
1.4.5
前者については,与えられた関数に0を適用して,その数にsquareを適用するような関数ZeroSquare
は,
let ZeroSquare f = square ( f 0 ) ZeroSquare :: (Integer -> Integer) -> Integer
後者は,本文中の twice
が例である
1.4.6
-x
はxの符号反転を示すので,3つ目は偽.また,+
と×
は交換法則が成り立つ.よって2つが真.
1.4.7
uncurry f (x, y) = f x y
curry (uncurry f) x y = curry ((x', y') -> f x' y') x y = ((x', y') -> f x' y') (x, y) = f x y uncurry (curry f) (x, y) = uncurry (x -> y -> f (x, y)) (x, y) = (x -> y -> f (x, y)) x y = f (x, y)