Workshop/StartHaskell2/exercise2

『型を信じろ!』 練習問題

型の意味

null関数の型はこんな感じです。これはどういう意味でしたか。(p.24)

数字の絶対値をとる関数absはこんな感じです。どういう意味でしたか。

またtake関数の型はどうでしょうか。


型を考えよう

次の値の型は何ですか?

次の関数の型は何ですか?

上の答えを、ghci を使って確かめましょう。


数字の型クラス

以下の2つの式の型は同じですか、異なりますか。何故ですか。

(ヒント: * と / の型を調べてみよう)


型から動きを考える

以下の関数がどういう動きをするか、型から想像できますか。


hoogleを使ってみよう

succ関数とは反対に、ひとつ前の値を返す関数は何ですか。(ヒント:Hoogleで型を検索してみよう)


与えらえた型から値を想像してみよう

ある日、ghciを使って遊んでいて以下のような結果が得られました。

ところがXXXの部分を覚えていません。 XXXはどのような式になるでしょうか。 (答は一つではありません)


与えらえた型から値を想像してみよう2.

以下の型になる式を探してみよう。


型クラスのインスタンスを探そう

Eq クラスに属する型にはどんなものがありますか。 (ヒント:Hoogleで Eq を検索してみよう)

また Eq クラスと Show クラスの両方に属する型はありますか。


Boundedクラス

Bounded クラスに属する型を探して、その上限値を表示してみよう。 (p.32)


型を変えるだけで動きが変わる

円の直径を求めるcircumference関数の型を Float -> Float から Double -> Double に書き換えると、値の制度が倍になります (p.25)

しかし, この関数の型を Int -> Int に書き換えるとエラーになります。何故ですか。(ヒント: pi の型を確認してみよう)


型エラー

以下の式は型エラーになります。何故ですか。

しかし、以下の式はえらーになりません。何故ですか。(P.33)


型変換

上述の問題で, Int型とDouble型は足せないことを見ました。

この2つを足したいときは, 明示的に型変換をする必要があり、そのための関数が用意されています。(P.33)

この関数を使って, 1 + 1.0 をInt型として足してみましょう。


型エラーを直す

以下のプログラムにはエラーが三つある。エラーを修正し、正しく動くか確かめよ。

(プログラミングHaskell演習2-3)

練習問題リンク集