Open Source WEB

問題 1.20

正規順序

    gcd 206 40
==> if 40 == 0 then 206 else gcd 40 (rem 206 40)
==> if False then 206 else gcd 40 (rem 206 40)
==> gcd 40 (rem 206 40)
==> if rem 206 40 == 0 
       then 40 
       else gcd (rem 206 40) (rem 40 (rem 206 40))
r=> if 6 == 0
       then 40 
       else gcd (rem 206 40) (rem 40 (rem 206 40))
==> if False
       then 40
       else gcd (rem 206 40) (rem 40 (rem 206 40))
==> gcd (rem 206 40) (rem 40 (rem 206 40))
==> if rem 40 (rem 206 40) == 0
       then rem 206 40
       else gcd (rem 40 (rem 206 40)) (rem (rem 206 40) (rem 40 (rem 206 40)))
r=> if rem 40 6 == 0 
       then rem 206 40
       else gcd (rem 40 (rem 206 40)) (rem (rem 206 40) (rem 40 (rem 206 40)))
r=> if 4 == 0
       then rem 206 40
       else gcd (rem 40 (rem 206 40)) (rem (rem 206 40) (rem 40 (rem 206 40)))
==> if False 
       then rem 206 40
       else gcd (rem 40 (rem 206 40)) (rem (rem 206 40) (rem 40 (rem 206 40)))
==> gcd (rem 40 (rem 206 40)) (rem (rem 206 40) (rem 40 (rem 206 40)))
==> if rem (rem 206 40) (rem 40 (rem 206 40)) == 0
       then rem 40 (rem 206 40)
       else gcd (rem (rem 206 40) (rem 40 (rem 206 40)))
                (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
r=> if rem 6 (rem 40 (rem 206 40)) == 0
       then rem 40 (rem 206 40)
       else gcd (rem (rem 206 40) (rem 40 (rem 206 40)))
                (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
r=> if rem 6 (rem 40 6) == 0
       then rem 40 (rem 206 40)
       else gcd (rem (rem 206 40) (rem 40 (rem 206 40)))
                (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
r=> if rem 6 4 == 0
       then rem 40 (rem 206 40)
       else gcd (rem (rem 206 40) (rem 40 (rem 206 40)))
                (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
r=> if 2 == 0
       then rem 40 (rem 206 40)
       else gcd (rem (rem 206 40) (rem 40 (rem 206 40)))
                (rem (rem 40 (rem 206 40)) 
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
==> if False 
       then rem 40 (rem 206 40)
       else gcd (rem (rem 206 40) (rem 40 (rem 206 40)))
                (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
==> gcd (rem (rem 206 40) (rem 40 (rem 206 40)))
        (rem (rem 40 (rem 206 40)) (rem (rem 206 40) (rem 40 (rem 206 40))))
==> if rem (rem 40 (rem 206 40)) (rem (rem 206 40) (rem 40 (rem 206 40))) == 0
       then rem (rem 206 40) (rem 40 (rem 206 40))
       else gcd (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
                (rem (rem (rem 206 40) (rem 40 (rem 206 40)))
                     (rem (rem 40 (rem 206 40))
                          (rem (rem 206 40) (rem 40 (rem 206 40)))))
r=> if rem (rem 40 6) (rem (rem 206 40) (rem 40 (rem 206 40))) == 0
       then rem (rem 206 40) (rem 40 (rem 206 40))
       else gcd (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
                (rem (rem (rem 206 40) (rem 40 (rem 206 40)))
                     (rem (rem 40 (rem 206 40))
                          (rem (rem 206 40) (rem 40 (rem 206 40)))))
r=> if rem 4 (rem (rem 206 40) (rem 40 (rem 206 40))) == 0
       then rem (rem 206 40) (rem 40 (rem 206 40))
       else gcd (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
                (rem (rem (rem 206 40) (rem 40 (rem 206 40)))
                     (rem (rem 40 (rem 206 40))
                          (rem (rem 206 40) (rem 40 (rem 206 40)))))
r=> if rem 4 (rem 6 (rem 40 (rem 206 40))) == 0
       then rem (rem 206 40) (rem 40 (rem 206 40))
       else gcd (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
                (rem (rem (rem 206 40) (rem 40 (rem 206 40)))
                     (rem (rem 40 (rem 206 40))
                          (rem (rem 206 40) (rem 40 (rem 206 40)))))
r=> if rem 4 (rem 6 (rem 40 6)) == 0
       then rem (rem 206 40) (rem 40 (rem 206 40))
       else gcd (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
                (rem (rem (rem 206 40) (rem 40 (rem 206 40)))
                     (rem (rem 40 (rem 206 40))
                          (rem (rem 206 40) (rem 40 (rem 206 40)))))
r=> if rem 4 (rem 6 4) == 0
       then rem (rem 206 40) (rem 40 (rem 206 40))
       else gcd (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
                (rem (rem (rem 206 40) (rem 40 (rem 206 40)))
                     (rem (rem 40 (rem 206 40))
                          (rem (rem 206 40) (rem 40 (rem 206 40)))))
r=> if rem 4 2 == 0
       then rem (rem 206 40) (rem 40 (rem 206 40))
       else gcd (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
                (rem (rem (rem 206 40) (rem 40 (rem 206 40)))
                     (rem (rem 40 (rem 206 40))
                          (rem (rem 206 40) (rem 40 (rem 206 40)))))
r=> if 0 == 0
       then rem (rem 206 40) (rem 40 (rem 206 40))
       else gcd (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
                (rem (rem (rem 206 40) (rem 40 (rem 206 40)))
                     (rem (rem 40 (rem 206 40))
                          (rem (rem 206 40) (rem 40 (rem 206 40)))))
==> if True 
       then rem (rem 206 40) (rem 40 (rem 206 40))
       else gcd (rem (rem 40 (rem 206 40))
                     (rem (rem 206 40) (rem 40 (rem 206 40))))
                (rem (rem (rem 206 40) (rem 40 (rem 206 40)))
                     (rem (rem 40 (rem 206 40))
                          (rem (rem 206 40) (rem 40 (rem 206 40)))))
==> rem (rem 206 40) (rem 40 (rem 206 40))
r=> rem 6 (rem 40 (rem 206 40))
r=> rem 6 (rem 40 6)
r=> rem 6 4
r=> 2

r=> が rem の適用を簡約した箇所.18回

作用順序

    gcd 206 40
==> if 40 == 0 then 206 else gcd 40 (rem 206 40)
==> if False then 206 else gcd 40 (rem 206 40)
==> gcd 40 (rem 206 40)
r=> gcd 40 6
==> if 6 == 0 then 40 else gcd 6 (rem 40 6)
==> if False then 40 else gcd 6 (rem 40 6)
==> gcd 6 (rem 40 6)
r=> gcd 6 4
==> if 4 == 0 then 6 else gcd 4 (rem 6 4)
==> if False then 6 else gcd 4 (rem 6 4)
==> gcd 4 (rem 6 4)
r=> gcd 4 2
==> if 2 == 0 then 4 else gcd 2 (rem 4 2)
==> if False then 4 else gcd 2 (rem 4 2)
==> gcd 2 (rem 4 2)
r=> gcd 2 0
==> if 0 == 0 then 2 else gcd 0 (rem 2 0)
==> if True then 2 else gcd 0 (rem 2 0)
==> 2

rem の簡約回数は.4回

Haskellの簡約はグラフ簡約なので,

    gcd x y where x = 206; y = 40
==> if (y == 0) then 206 else gcd 40 (rem 206 40)
==> if False then 206 else gcd 40 (rem 206 40)
==> gcd x y where x = 40; y = rem 206 40
==> if y == 0 then x else gcd y (rem x y) where x = 40; y = rem 206 40
r=> if 6 == 0 then 40 else gcd 6 (rem 40 6)
==> if False then 40 else gcd 6 (rem 40 6)
==> gcd x y where x == 6 ; y = rem 40 6
==> if y == 0 then x else gcd y (rem x y) where x = 6; y = rem 40 6
r=> if 4 == 0 then 6 else gcd 4 (rem 6 4)
==> if False then 6 else gcd 4 (rem 6 4)
==> gcd x y where x = 4; y = rem 6 4
==> if y == 0 then x else gcd y (rem x y) where x = 4;  y = rem 6 4
r=> if 2 == 0 then 4 else gcd 2 (rem 4 2)
==> if False then 4 else gcd 2 (rem 4 2)
==> gcd x y where x = 2; y = rem 4 2
==> if y == 0 then x else gcd y (rem x y) where x = 2; y = rem 4 2
r=> if 0 == 0 then 2 else gcd 0 (rem 2 0)
==> if True then 2 else gcd 0 (rem 2 0)
==> 2

というわけで,rem の適用の簡約回数は作用順序簡約と同じ 4回.


コメントをどうぞ!

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us