開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- Haskell (プログラミング言語)
- Haskell Platform(ghci)(処理系)
関数プログラミング入門(Richard Bird (著)、山下伸夫 (翻訳)、オーム社)の第3章(数値)、3.5(例: 有理数)、練習問題3.5.1、3.5.2を取り組んでみる。
練習問題3.5.1、3.5.2
コード(Emacs)
-- 3.5.1 -- x1 / y1 = x2 / y2 -- (d1 * x1') / (d1 * y1') = (d2 * x2') / (d2 * y2') -- (d1 * x1') * (d2 * y2') = (d2 * x2') * (d1 * y1') -- x1' * y2' = x2' * y1' -- y2' = m * y1' -- y1' = n * y2' -- y1' = y2' -- x1' = x2' -- x1' / y1' = x2' / y2' -- 3.5.2 -- x = 10 * q + r (0 <= r < 10) -- x = 10 * (q + 1) + (r - 10) -- r < 5 -- x = 10 * q + r -- y = q, z = r -- r >= 5 -- x = 10 * (q + 1) + (r - 10) -- y = q + 1, z = r - 10 reprint :: Integer -> (Integer, Integer) reprint x = if r < 5 then (q, r) else (q + 1, r - 10) where q = div x 10 r = mod x 10 main :: IO () main = do print (reprint (-4)) print (reprint (-5)) print (reprint (-6)) print (reprint 4) print (reprint 5) print (reprint 6) print (reprint (-100)) print (reprint (-1)) print (reprint 0) print (reprint 1) print (reprint 100)
入出力結果(Terminal, ghci, runghc)
$ runghc sample5.hs (0,-4) (0,-5) (-1,4) (0,4) (1,-5) (1,-4) (-10,0) (0,-1) (0,0) (0,1) (10,0) $
0 コメント:
コメントを投稿