2021年度「プログラミング言語意味論 テスト」

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

問題

以下の問に答えよ。

Ⅰ. (記述問題)

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

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

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

    最近、小学生に対するプログラミング教育が盛んになっている。あなた も、春休みに叔父さんと叔母さんの家に一泊二日で行って、10 歳のいとこ に「プログラミングの神髄」を教える家庭教師のアルバイトをすることになっ た。ここで「プログラミングの神髄」とは特定のプログラミング言語やプラッ トフォームによらない、プログラミングの背後にある考え方をいう。

    あなたなら、どのような題材を選んで、どのように教えるか?計画を立てよ。 なお、叔父さんと叔母さんは金に糸目をつけなくても良い、と言っている。

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

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

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

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

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

    注意: 通常は “単語” には「,」や「.」 などの句読点は含まれないが、この問では、空白(タブ、改行を含む)以外の文字が連続するものと 解釈せよ。

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

    入力例

    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.
    

    出力例

    do sed elit, adipiscing consectetur amet, sit dolor ipsum Lorem
    ad enim Ut aliqua. magna dolore et labore ut incididunt tempor eiusmod
    ut nisi laboris ullamco exercitation nostrud quis veniam, minim
    in dolor irure aute Duis consequat. commodo ea ex aliquip
    nulla fugiat eu dolore cillum esse velit voluptate in reprehenderit
    in sunt proident, non cupidatat occaecat sint Excepteur pariatur.
    laborum. est id anim mollit deserunt officia qui culpa
    
  2. (選択)命令型言語の模倣: (24 点)
    提出ファイル名: Toi02b.hs

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

    ヒント:


Koji Kagawa