2022年度「プログラミング言語論」中間テスト
「プログラミング・パラダイム」テスト

解答上、その他の注意事項

問題

以下の問に答えよ。

Ⅰ. (Haskell プログラミング問題)

  1. (必須)Haskell:
    提出ファイル名: Foo.hs

    引数として与えられる整数の組のリストの要素のなかで、 一つが奇数、もう一つが偶数(順序は問わない)のものの、奇数のほうの和を返す関数

    を定義せよ。

    例えば、foo [(1,0),(2,-3),(11,7)]-2 であり、 foo [(0,-2),(3,5),(-1,7)]0 であり、 foo [(9,2),(4,6),(-1,8),(7,3),(0,5)]13 である。

    この問では map, filter, foldl, foldr などのリストに関するライブラリ関数や内包表記を使わずifthenelse 〜 式、算術演算子、 論理演算子、比較演算子、パターンマッチング、ガード、再帰のみを使って定義せよ。

    また、Haskell で“余り”を表す算術演算子 は `mod` である。例えば (-7) `mod` 4(あるい は mod (-7) 4)の値は 1 である。あるいは odd, even という関数を使っても良い。

  2. (必須)Haskell:
    提出ファイル名: Bar.hs

    正の整数 \(n\) を引数として受け、 \(0 \le x \le n \le y \le 2n\) かつ \(y - x \le n\) を満たす 整数の組 \((x,y)\)を列挙する関数

    を(リストの内包表記を用いて)定義せよ。

    例えば、bar 2[(0,2),(1,2),(1,3),(2,2),(2,3),(2,4)]bar 3[(0,3),(1,3),(1,4),(2,3),(2,4),(2,5),(3,3),(3,4),(3,5),(3,6)] で、 bar 5[(0,5),(1,5),(1,6),(2,5),(2,6),(2,7),(3,5),(3,6),(3,7),(3,8),(4,5),(4,6),(4,7),(4,8),(4,9),(5,5),(5,6),(5,7),(5,8),(5,9),(5,10)] となる。
    (リストの要素の順番はこの通りでなくても良い。)

    なお、\(m\) から \(n\) まで(ただし \(m \le n\))の整数のリストは、 [m..n] という式で得ることができる。例えば、[0..5][0,1,2,3,4,5] である。

問 Ⅰ の解答が完了した人は

戻る


Koji Kagawa