開発環境
- 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 コメント:
コメントを投稿