ノート・プリント・参考書などは持ち込み可である。
携帯電話などの通信機能を持つものは持ち込み不可である。
プログラミング問題を解答するときは、 ネットワークに接続して WWW を閲覧しても良いが、掲示板、チャット、 メールなどで生身の人間と通信することは禁じる。
テストの配点は50点である。 合格はレポートの得点を加点して、100 点満点中 60 点以上とする。
以下の問に答えよ。
Ⅰ. (Haskell プログラミング問題)
引数として与えられる整数の組のリストの要素のなかで、 第 1 成分が第 2 成分より大きい組の第 2 成分の和を返す関数
を定義せよ。
例えば、foo [(2,1),(2,-3),(11,7)] は 5 であり、
foo [(0,-2),(3,5),(-1,7)] は -2 であり、
foo [(0,4),(3,2),(5,5),(6,9)] は 2 である。
この問では map, filter, foldl,
foldr などのリストに関するライブラリ関数や内包表記を使わず、
if 〜 then 〜 else 〜 式、算術演算子、
論理演算子、比較演算子、パターンマッチング、ガード、再帰のみを使って定義せよ。
正の整数 \(n\) を引数として受け、 \(1 \le x \le y \le n\) かつ \(x * y\) が 18 の倍数となる 整数の組 \((x,y)\)を列挙する関数
を(リストの内包表記を用いて)定義せよ。
例えば、bar 4 は []、
bar 6 は [(3,6),(6,6)] で、
bar 9 は [(2,9),(3,6),(4,9),(6,6),(6,9),(8,9)] となる。
(リストの要素の順番はこの通りでなくても良い。)
なお、\(m\) から \(n\) まで(ただし \(m \le n\))の整数のリストは、
[m..n] という式で得ることができる。例えば、[0..5]
は [0,1,2,3,4,5] である。
また、Haskell で“余り”を表す算術演算子は `mod`
である。例えば 7 `mod` 4(あるいは mod 7 4)の値は
3 である。