2017年2月17日金曜日

開発環境

関数プログラミング入門(Richard Bird (著)、山下伸夫 (翻訳)、オーム社)の第3章(数値)、3.1(自然数)、練習問題3.1.1、3.1.2、3.1.3、3.1.4、3.1.5を取り組んでみる。

練習問題3.1.1、3.1.2、3.1.3、3.1.4、3.1.5

コード(Emacs)

-- 3.1.1
data Zplus = ONE | Succ' Zplus

-- 3.1.2
data Nat = Zero | Succ Nat
  deriving (Eq, Ord, Show)

convert :: Nat -> Integer
convert Zero = 0
convert (Succ n) = 1 Prelude.+ convert n

-- 3.1.3
(+) :: Nat -> Nat -> Nat
(+) Zero n = n
(+) (Succ n) m = Succ (n Main.+ m)
  
(*) :: Nat -> Nat -> Nat
(*) Zero n = Zero
(*) (Succ n) m = m Main.+ (n Main.* m)

-- 3.1.4 n * n ステップ
-- 3.1.5
sub :: Nat -> Nat -> Nat
sub Zero n = Zero
sub (Succ n) Zero = n
sub (Succ n) (Succ m) = n `sub` m

a = Zero
b = Succ a
c = b Main.+ b
d = c Main.* c
e = c Main.* d

main :: IO ()
main = do
  print Zero
  print (Succ Zero)
  print a
  print b
  print c
  print d
  print e
  print $ d `sub` e
  print $ e `sub` d  

入出力結果(Terminal, ghci)

$ runghc sample1.hs
Zero
Succ Zero
Zero
Succ Zero
Succ (Succ Zero)
Succ (Succ (Succ (Succ Zero)))
Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ Zero)))))))
Zero
Succ (Succ (Succ Zero))
$

0 コメント:

コメントを投稿