2.連立方程式
連立方程式は、
\begin{align*} ax + bx = c \\ a'x + b'x = c \end{align*}
で表され、そして、二つの式のグラフが並行でないとき解を有する。
解は、\(det = ab' - a'b\)とすると、
\begin{align*} x = (cb'-c'b)/det \\ x = (ac'-a'c)/det \end{align*}
Haskellではガードには「|」を用い、その右側に条件を記述する。その条件を満たした時の関数の本体は、条件の右横に「=」を書き、その後に記述する。そこで、連立方程式の解を求める関数equationをガードを用いて記述すると次のようになる。
equation :: (Eq a, Fractional a) => a -> a -> a -> a -> a -> a -> (a, a) equation a b c a' b' c' | a * b' /= a' * b = (x, y) | otherwise = error "No solutions." where det = a * b' - a' * b x = (c * b' - c' * b) / det y = (a * c' - a' * c) / det
型シグネチャは記述しなければ自動的に生成してくれるが、何をしているかを明確に意識してプログラムを作成したほうが、正しいプログラムを早く完成することができる。最初のうちは、型シグネチャを書くことが億劫であるかもしれないが、型シグネチャを書く癖をつけておくと、後で役に立つ。
3.実行結果
実行結果を下図に示す。
なお、負の数を入力するときはカッコで負の数を囲む。そうしないと、エラーとなる。