私は学校のスキームの割り当てに取り組んでいます。レコード "タイプ"(リストとして実装されています)(音楽レコードを表す)を定義する質問があります。スキーム:レコードのリストへの追加
私は問題を抱えていますが、これらのレコードのリストを作成するプロシージャを作成してから、このリストにレコードを追加するように求められます。これはかなりシンプルですが、何か間違っているような気がします。
リスト(つまり、この例ではレコードシェルフ)に要素を追加する方法はわかりましたが、このadd
関数の呼び出しでこのリストを適切に維持する方法がわかりません。ここに私が持っているものがあります:
(define (add-record record lst)
(append lst (list record)))
これは私が期待しているように動作しますが、私の問題はこの手順を呼び出すときです。
(define record-self '())
は私の最初の試みでしたが、もちろん、私はそれだけで定義されたrecord-shelf
リストを渡し、add-record
手順でレコードを追加するたびに、よく、私の追加機能、すなわちコピー(ブランドの新しいリストを返し、追加されたレコードで)。これは理にかなっていますが、それが私の望むものかどうかはわかりません。だから、
私はそうのようなリストにレコードの束を追加したい場合:
(add-record highway61 record-shelf)
(add-record sgtPepper record-shelf)
もちろんrecord-shelf
が更新されませんので、それは、私が欲しいものにはなりません。そして私は、この時点ではset!
または割り当てを使用するはずだとは思わない。
毎回、返されたリスト(add-record
)のコピーを取得して、その呼び出したリストを次の呼び出しで使用するだけでよいですか?
関数型プログラミングでは、グローバル変数を避ける必要があります。あなたの最終的な質問への答えは「はい」です。 '(追加レコードsgtPepper(レコード追加ハイウェイ61レコードシェルフ))' – Enrique
ところで、非常によく表現された質問です。 – JasonFruit