プログラミング言語論・お知らせ
第 3 回実習( 7 月 13 日)について
第2回レポートをやってください。
第2回レポートについて
こちらを見てください。
提出はテストと同時(7/27)です。
第 2 回実習( 6 月 22 日)について追加
- 1番は 22日中に提出
- 2番は来週(29日)までの宿題
- 3番は第 2 回レポートの課題の一つにします。
第 2 回実習( 6 月 22 日)
以下の 3問を解いて、答をテキストファイル
「000622.txt」にまとめ、
「\\stfile\Report\kagawa\2000\ProgLang1\000622\」
の下に 「s自分の学籍番号」(半角でアルファベットは小文字)というフォルダを作成して、その下に置け。
- 問 4.3.4(35ページ)
「以下の空欄の値を予想せよ。(以下略)」
さらに実際に自分で実行して確かめよ。
- 問 4.1.15(30ページ)
「2つのリスト xsと ysを受けとり、
xsの順番を逆にしたものを ysの先頭に付け加える関数
rev-appendを定義せよ。例えば、
(rev-append '(1 2 3 4) '(5 6 7 8))
は、(4 3 2 1 5 6 7 8)となる。」
- 次の 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言語で定義せよ。
ただし、
- C言語では 「!」は関数名に使えないので 「EX」で代用せよ。
- リストの要素は int型の場合のみ考えれば良い。
- プログラムに必要な、リストのデータ型の定義や、いろいろな補助的な関数
(リストを画面に出力するための関数
void print_list(List)、
リストをキーボードから入力するための関数
List read_list(void))の定義は以下に示すが、
これらもできるだけ見ずに、まず自分で考えてみること
テストとして次のような一連の文を実行するプログラムを作成して、
動作を確かめよ。
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回レポートに出題予定の
- 問 4.1.13, 問 4.1.14, 問 4.1.16, 問 4.1.17, 問 4.1.19,
を解いてください。
第 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の使用法
(プリント配布済)を読んで、本日の課題をやってください。
本日の課題
- fact関数(プリント p.21)を定義し、
自分の学籍番号の下3桁(s99t101なら 101)の階乗を計算せよ。
- 問 3.8.9(プリント p.23)を試せ。
(特に C言語で quux関数を定義して実行してみること。
どのようなエラーになるか?)
(レポートの課題に追加)
実行結果は、コピー・ペーストして、
「000608.txt」というファイル名のテキストファイルにして、
「\\stfile\Report\kagawa\2000\ProgLang1\000608\」の下に「s学籍番号」
という名前のフォルダを作成して、その下に提出すること。
- MIT Schemeのコピー・ペーストは MIT
Schemeの使用法を参照すること。
MS-DOSプロンプトからコピーは、左上の
をクリックして、「編集」─「範囲指定」を選んで、
マウスで範囲指定してから、「」─「編集」─「コピー」、
逆に MS-DOSプロンプトへのペーストは
「」─「編集」─「貼り付け」
- 学籍番号の部分は半角・小文字を使用すること
- いきなり\\stfile\Report\kagawa\2000\ProgLang1\000608\の下に、
「新規作成」でフォルダを作ると、誰が作ったものかわからなくなるので、
一度、デスクトップに作成して、フォルダ名を変更してから、移動、
またはコピーすること。
残った時間は、第 1 回レポートをやってください。
プログラミング言語論のホームページ
Koji Kagawa
(kagawa@eng.?????)