プログラミング言語論・お知らせ


第 3 回実習( 7 月 13 日)について

第2回レポートをやってください。

第2回レポートについて

こちらを見てください。 提出はテストと同時(7/27)です。

第 2 回実習( 6 月 22 日)について追加


第 2 回実習( 6 月 22 日)

以下の 3問を解いて、答をテキストファイル 「000622.txt」にまとめ、 「\\stfile\Report\kagawa\2000\ProgLang1\000622\」 の下に 「s自分の学籍番号」(半角でアルファベットは小文字)というフォルダを作成して、その下に置け。
  1. 問 4.3.4(35ページ)
    「以下の空欄の値を予想せよ。(以下略)」 さらに実際に自分で実行して確かめよ。

  2. 問 4.1.15(30ページ)
    「2つのリスト xsysを受けとり、 xsの順番を逆にしたものを ysの先頭に付け加える関数 rev-appendを定義せよ。例えば、
    (rev-append '(1 2 3 4) '(5 6 7 8))
    は、(4 3 2 1 5 6 7 8)となる。」

  3. 次の add1, add1!(例題 4.3.1), append(例題 4.1.10), append!(例題 4.3.3)
    (define (add1 xs)
      (if (null? xs)
          '()
          (cons (+ 1 (car xs)) (add1 (cdr xs)))))
    
    (define (add1! xs)
      (if (null? xs)
          '()
          (begin (set-car! xs (+ (car xs) 1))
                 (add1! (cdr xs)))))
    
    (define (append xs ys)
       (if (null? xs)
           ys
           (cons (car xs) (append (cdr xs) ys))))
    
    (define (append! xs ys)
       (if (null? (cdr xs))
           (set-cdr! xs ys)
           (append! (cdr xs) ys)))
    
    とそれぞれ同等の関数を C言語で定義せよ。

    ただし、

    テストとして次のような一連の文を実行するプログラムを作成して、 動作を確かめよ。

      List list1, list2;
    
      printf("Please Input List 1: ");
      list1 = read_list();			/* リストその 1の入力 */
      printf("Please Input List 2: ");
      list2 = read_list();			/* リストその 2の入力 */
    
      printf("(add1 list1) => \t");
      print_list(add1(list1));		/* add1のテストの結果出力 */
      putchar('\n');
      add1EX(list1);
      printf("(append list1 list2) => \t");
      print_list(append(list1, list2)); 	/* add1!と appendのテストの結果出力 */
      putchar('\n');
      appendEX(list1, list2);		/* append!のテストの結果出力 */
      printf("list1 => \t");
      print_list(list1);
      putchar('\n');
    

    さらにチャレンジ問題

    • 上のプログラムで、この後もプログラムの実行が続くとして, 今この時点で freeできるメモリ領域(つまり Schemeならばゴミ集めされるメモリ領域)はどれか?
    も考えてみよ。
以上が出来た人は、第2回レポートに出題予定の を解いてください。

第 1 回実習( 6 月 8 日)

まず、自分のノートパソコンに MIT Schemeがインストールされているかどうか、 確認してください。(デスクトップの「工学部メニュー」の中、もしくは、 「スタート」─「プログラム」─「MIT Scheme 何とか」─「All」 (または「MIT Scheme (Edwin+Compiler)」)にあるはずです。)

「Edwin: *scheme*」というタイトルのウインドウが出てくれば、 OKです。

(追加) 「工学部メニュー」から実行した場合で、 「Edwin: *scheme*」ではなく「MIT Scheme」というウインドウしか、 でない場合は、 このファイルをダウンロードして、 「工学部メニュー」に置いて実行してください。

まったく、インストールされていない場合は、 このページの MIT Schemeのところを見て各自のノートパソコンにインストールしてください。 (万一、インストールがうまく行かない場合は、 3201教室のパソコンでも MIT Schemeを実行することができます。 "G:\kagawa\MIT Scheme"の Allをダブルクリックしてください。)

MIT Schemeの使用法 (プリント配布済)を読んで、本日の課題をやってください。

本日の課題

  1. fact関数(プリント p.21)を定義し、 自分の学籍番号の下3桁(s99t101なら 101)の階乗を計算せよ。
  2. 問 3.8.9(プリント p.23)を試せ。 (特に C言語で quux関数を定義して実行してみること。 どのようなエラーになるか?)
    (レポートの課題に追加)
実行結果は、コピー・ペーストして、 「000608.txt」というファイル名のテキストファイルにして、 「\\stfile\Report\kagawa\2000\ProgLang1\000608\」の下に「s学籍番号」 という名前のフォルダを作成して、その下に提出すること。 残った時間は、第 1 回レポートをやってください。

プログラミング言語論のホームページ


Koji Kagawa (kagawa@eng.?????)