2017年2月6日月曜日

開発環境

関数プログラミング入門(Richard Bird (著)、山下伸夫 (翻訳)、オーム社)の第1章(基本概念)、1.6(型)、練習問題1.6.1、1.6.2、1.6.3、1.6.4を取り組んでみる。

練習問題1.6.1、1.6.2、1.6.3、1.6.4

コード(Emacs)

-- 1.6.1
const :: a -> b -> a
const x y = x

subst :: (a -> b -> c) -> (a -> b) -> a -> c
subst f g x = f x (g x)

apply :: (a -> b) -> a -> b
apply f x = f x

flip :: (a -> b -> c) -> b -> a -> c
flip f x y = f y x

-- 1.6.2
f :: (Num a) => (a, a) -> a
f (x, y) = x - y

swap :: (a, b) -> (b, a)
swap (x, y) = (y, x)

g = Main.flip (curry f)
h = curry (f . swap)

-- 1.6.3
strange :: ((a -> b) -> a) -> (a -> b) -> b
strange f g = g (f g)

-- 1.6.4
square :: (Num a) => a -> a
square x = x * x

入出力結果(Terminal, ghci)

$ ghci sample6.hs
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
[1 of 1] Compiling Main             ( sample6.hs, interpreted )
Ok, modules loaded: Main.
*Main> g 1 2
1
*Main> h 1 2
1
*Main> square 10
100
*Main> square 10.0
100.0
*Main> :q
Leaving GHCi.
$

0 コメント:

コメントを投稿