2023 年度「プログラミング言語論」期末テスト

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

問題

以下の問に答えよ。

Ⅰ. (記述問題)

  1. (必須)語句: (13 × 2 点)
    提出ファイル名: toi0101a.txt, toi0101b.txt

    プログラミング言語(やその処理系)で用いられる次の 6 つの語句のう 2 つを選択し説明せよ。その際、実際に動作するソースコードなど、 具体的な例を挙げよ。ただし、講義プリントにのっている例 やネットで見つかる例そのままではなくオリジナルの例を考えること。

  2. (ボーナス問題)自由記述: (最高 20点)
    提出ファイル名: toi0102.txt

    「楽しいプログラミング」とは何か? プログラミングの学習を楽しくするアイデアを、自由に、できるだけ具体的 に考述せよ。 あるいは、数学・理科など他の教科の学習を、プログラミングと関連付けて楽しくするアイデアでも良い。

問 Ⅱ はペーパー(紙)問題(ラムダ計算)となっている。

問 Ⅱ はペーパー(紙)問題(ラムダ計算)とオンライン問題の選択になっている。

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

以下の a. b. いずれかを選択して解答せよ。 (両方、解答した場合は、ボーナス点として採点する。)

  1. (選択)IO モナド: (24 点)
    提出ファイル名: Toi02a.hs

    IO モナドを利用して、main 関数を持つ、以下のような Haskell プログラムを作成せよ。

    • 入力文字列中で 'e' または 'E' を 6 個以上含む 行だけを出力する

    ヒント: getContents を、lines, unlines, words, unwords などと組み合せて使う。

    入力例

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
    eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
    minim veniam, quis nostrud exercitation ullamco laboris nisi ut
    aliquip ex ea commodo consequat. Duis aute irure dolor in
    reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
    pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
    culpa qui officia deserunt mollit anim id est laborum.
    

    出力例

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
    eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
    reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
    
  2. (選択)命令型言語の模倣: (24 点)
    提出ファイル名: Toi02b.hs

    次の C の関数とほぼ同等な Haskell の関数を定義せよ。

    • 「ほぼ」というのは整数の精度などに起因する違いなどは除く、という程度の意味である。

    • Util コンパイラーを使って良い。 その場合は、用いた Util のソースコードも(Haskell ソース中のコメントとして)示すこと。

    • ハンドコーディング(ツールを使わずに自分の手でプログラムを作成すること)しても良い。 モナドを明示的に使わなくてもよい。(この問では“同等”の根拠を記す必要はない。)

    ヒント:

    • C の 「%」演算子に対応する Haskell の演算子は `mod`、 C の「!=」に対応するのは Haskell の「/=」である。 また、Haskell の整数の除算は `div` である。

    • 少なくとも foo 4(値は 3 になる) foo 11(値は 28 になる)foo 27(値は 42 になる) は確認せよ。


Koji Kagawa