情報科学概論IIA 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/Joka2a-1998/1998-06-30
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html
先週の課題(教科書84ページ〜86ページの「8.3演習問題」、教科書89ペー ジ〜91ページの「9.3演習問題」)のチェック・ポイント
直接 cons を使わなくても、次のような関数は内部で cons を呼び出しているので、同じように使ってはいけません。
先週も説明したように、 普通は、末尾再帰で書けないものを、無理矢理、末尾再帰で書こうとしてプロ グラムを複雑にしている例がかなりありました。 教科書の練習問題の多くは、線形再帰だが、末尾再帰にならないものです。末 尾再帰で書けるものは、do でかけます。逆に、do で書きにくいものは、末尾 再帰でも書けません。
再帰する時には、cdr や (- n 1) で、小さくしていくこと。 そうでないと、無限に再帰を続けて終らなくなります。
次のようなステップで考えるとわかりやすい。
set-cdr! は、1回だけやれば十分です。 再帰で何度も呼び出さなくてもできるはずです。
> (modulo 10 3) 1 > (modulo 12 3) 0 >
誤: (define (is-baisuu-i x) (modulo x i))
正: (define (is-baisuu-i x) (= (modulo x i) 0))それから、#t, #f を返す時には、YHM_Computer_Escape(=)
<
、
>
のように、
もともと
#t, #f
を返すものなら、その値をそのまま返すようにしてもよい。
わざわざ次のように明示的に書かなくてもよい(書いてもよい)。
(if (= .... ) '#t '#f )
To: yas Subject: [joka2a] enshuu-8.3 enshuu-9.3