ノート・プリント・参考書などは持ち込み可である。
携帯電話などの通信機能を持つものは使用不可である。
プログラミング問題を解答するときは、 ネットワークに接続して WWW を閲覧しても良いが、掲示板、チャット、メールなどで生身の人間と通信することは禁じる。 また、人間と区別のつかないもの(対話型の AI など)と通信することも禁じる。
テストの配点は50点である。 合格はレポートの得点を加点して、100 点満点中 60 点以上とする。
以下の問に答えよ。
Ⅰ. (Haskell の式)
以下の問で使用する関数 take, from,
iterate, zipWith, map は、講義プリントに定義されている通りの関数である。
例えば take 6 (iterate (1 +) 1) の評価の結果は、 [1,2,3,4,5,6] である。
これらの関数を使って評価結果がそれぞれ次の値になるような Haskell の式を考えよ。ただし 1, 3, 99 のような数値定数は 各問で 4 箇所までしか使用することができないとする。
[1,-2,4,-8,16,-32] [2,4,10,28,82,244] (= [1 + 1, 3 + 1, 9 + 1, 27 + 1, 81 + 1, 243 + 1]) [2,4,7,12,21,38] (= [1 + 1, 2 + 2, 3 + 4, 4 + 8, 5 + 16, 6 + 32])評価結果が次の値になるような、リストの内包表記を用いた Haskell の式を考えよ。
ただし 1, 3, 99 のような数値定数は各問で 4 箇所までしか使用することができないとする。
なお \(m\) から \(n\) まで(ただし \(m \le n\))の整数のリストは、
[m..n] という式で得ることができる。例えば、[1..5]
は [1,2,3,4,5] である。
[1,2,3,2,4,6,3,6,9,4,8,12]answer1 = … answer2 = … answer3 = … answer4 = …
Ⅱ. (Haskell プログラミング問題)
引数として与えられる整数のリストの要素のなかで、 正の偶数の最大値を返す関数
を定義せよ。ただし、正の偶数が含まれていないときは 1 を返すようにせよ。
例えば、foo [2,1,2,-3,7,12] は 12 であり、
foo [-2,3,5,-1,15] は 1 であり、
foo [6,3,2,4,-12,-6,9] は 6 である。
この問では map, filter, foldl,
foldr などのリストに関するライブラリ関数や内包表記を使わず、
if 〜 then 〜 else 〜 式、算術演算子、
論理演算子、比較演算子、パターンマッチング、ガード、再帰のみを使って定義せよ。
また、Haskell で“余り”を表す算術演算子
は `mod` である。例えば (-7) `mod` 4(あるい
は mod (-7) 4)の値は
1 である。
あるいは odd, even という関数を使っても良い。
正の整数 \(n\) を引数として受け、 \(0 < y \le x\) かつ \(xy \le n^2 \) となる 整数の組 \((x,y)\)を列挙する関数
を(リストの内包表記を用いて)定義せよ。
例えば、bar 2 は [(1,1),(2,1),(2,2),(3,1),(4,1)]、
bar 3 は [(1,1),(2,1),(2,2),(3,1),(3,2),(3,3),(4,1),(4,2),(5,1),(6,1),(7,1),(8,1),(9,1)] で、
bar 4 は [(1,1),(2,1),(2,2),(3,1),(3,2),(3,3),(4,1),(4,2),(4,3),(4,4),(5,1),(5,2),(5,3),(6,1),(6,2),(7,1),(7,2),(8,1),(8,2),(9,1),(10,1),(11,1),(12,1),(13,1),(14,1),(15,1),(16,1)] となる。
(リストの要素の順番はこの通りでなくても良い。)
なお \(m\) から \(n\) まで(ただし \(m \le n\))の整数のリストは、
[m..n] という式で得ることができる。例えば、[1..5]
は [1,2,3,4,5] である。