2013年2月9日土曜日

開発環境

Real World Haskell』(Bryan O'SullivanJohn GoerzenDon Stewart(著)、山下 伸夫伊東 勝利株式会社タイムインターメディア(翻訳)、オライリー・ジャパン、2009年、ISBN978-4-87311-423-3)の3章(型を定義し、関数を単純化する)の3.13(ガード条件節の評価)の練習問題9、10.を解いてみる。

9, 10.

コード(BBEdit)

Sample.hs

-- file: Sample.hs
data Cartesian2D = Cartesian2D Double Double
                   deriving (Show)
data Direction = DLeft |
                 DRight |
                 DStraight
                 deriving (Eq, Show)
getDirection :: Cartesian2D -> Cartesian2D -> Cartesian2D -> Direction
getDirection (Cartesian2D x1 y1) (Cartesian2D x2 y2) (Cartesian2D x3 y3)
    | crossProduct > 0 = DLeft
    | crossProduct == 0 = DStraight
    | crossProduct < 0 = DRight
        where crossProduct = a * d - b * c
              a = x1 - x2
              b = y1 - y2
              c = x3 - x2
              d = y3 - y2

x = Cartesian2D 4 5
y = Cartesian2D 1 2
z = Cartesian2D (-5) 4

入出力結果(Terminal)

$ ghci
GHCi, version 7.4.2: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :load Sample.hs
[1 of 1] Compiling Main             ( Sample.hs, interpreted )
Ok, modules loaded: Main.
*Main> getDirection x y z
DLeft
*Main> getDirection z y x
DRight
*Main> getDirection z z x
DStraight
*Main> getDirection x x y
DStraight
*Main> getDirection y x y
DStraight
*Main> :quit
Leaving GHCi.
$

0 コメント:

コメントを投稿