情報科学概論IIA 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/Joka2a-1998/1998-06-16
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html
先週の課題(教科書62ページ〜67ページの「6.7演習問題」)のチェック・ ポイント
授業時間中に、教官、TA、隣の人などを使って、疑問点を解決するように。
単に結果だけでなく、日本語で説明をいれるように。
Lisp のプログラムを書く時に、tab を使うと自動的にきれいな字下げ(段付 け)をしてくれます。tab は、単なる字下げではなく、既存の行を整え流働き もあります。
define や if では適当に改行してください。横幅80桁で見やすいように。
(define (f x) (if ... xxx ...))
関数名は、考えてつけること。f は不可。
プログラムを書く時に、filename.scm のように、.scm という名前で終るファ イルに保存するようにしてください。その中で tab を打つと、自動的にきれ いに段付けしてくれます。
(define (f x) ... (car x) .... (car x) .... ... (car x) ... )これは、次のように let を使うとまとめられます。
(define (f x) (let ((a (car x))) ... a .... a .... ... a ... ))let には、見やすくする効果の他に、速度的な効果もあります。(car x) くら いですと速いので、あまり問題になることはありません。しかし、複雑な計算 をするような手続きの場合には、何度も何度も呼び出すと遅くなります。これ を let で定義しておけば、手続きは一度しか実行されません。
まず引数を、consセルから作られた2進木だと思って、深さを計算するプログ ラムを考えて見ます。基本的には、次のようになります。
この他に、'() やアトムについて適宜 depth を決める必要があります。
教科書の depth は、上の depth のうち、cdr 部分については、 1 を足さないようなものです。
> (member 'b '(a b c)) (b c) > (member 'z '(a b c)) #f > (member 'a '(a b c)) (a b c) >
> (if 'a 0 1) 0 > (if #f 0 1) 1 > (if () 0 1) 0 >
To: yas Subject: [joka2a] enshuu-8.3
余裕がある人は、89ページの演習問題9.3に進みなさい。