[トピック内 6 記事 (1 - 6 表示)] << 0 >>
Allegro Common Lisp 8.0を使っています。 以下のような問題があります。 2つのリストx,yを結合して新しいリストzを作り、zの要素の個数kをzの先頭に追加したリストを値とする関数concat(x,y)を定義する。 ただし、リストを連結する関数myappend(x,y)、要素の個数を求める関数mylength(z)を定義しておき、concatで使用する。 /*実際にはzはconcat関数の中間データになるため、大域変数zにバインドしてはいけない。 このような局所的な値の一時保存にはlet式を使う。*/ /*〜*/の部分がよくわかりません。 つまり、作ったリストzをconcatによって、変化させてはいけないということなのでしょうか? (defun concat (x y) (cons (mylength (myappend x y)) (myappend x y))) というようにしても問題がないように思いますが・・・ ご教授願います。 言っていることが分からなかったらすみません。
■No51391 (れい さん) に返信 > ■No51387 (もふ さん) に返信 返信ありがとうございます。 /*〜*/の部分の意味がやっと分かりました。 私が作ったプログラムは確かに無駄な計算をしていました・・・ let式を使った場合は、下のようなプログラムで大丈夫ですよね・・・? (defun concat (x y) (let ((z (myappend x y))) (cons (mylength z) z)))
2010/07/05(Mon) 10:34:06 編集(投稿者) <pre><pre>■No51408 (れい さん) に返信 > ■No51401 (もふ さん) に返信 >>■No51391 (れい さん) に返信 > >>■No51387 (もふ さん) に返信 >> ■No51408 (れい さん) に返信 問題解決です。 分かりやすく説明していただきありがとうございました。 自分でいろいろプログラムをいじってみて、プログラムを完成させたいと思います。 ありがとうございました^^</pre></pre>
管理者用
- Child Tree -