2

私はSchemeで配列のようなデータ構造を作ろうとしていますが、それを頻繁に参照する(そして変更する!)必要があるので、それに名前を付けたいと思っています。しかし、私がさまざまなチュートリアル サイトで読んだことから、後で参照するためにリストに名前を付ける唯一の方法は with のようdefineです。defineでリストを初期化すると、そのリストを変更または追加するのがより複雑になるように見えることを除いて、それは問題ありません。たとえば、私には ができないようで(append wordlist (element))、何らかの方法で ! バン。

基本的に私の質問は次のようになります:defineリストに名前を付ける唯一の希望はありますか? もしそうなら、私はその要素を変更するフープを飛び越えて立ち往生していますか? ありがとう。

4

3 に答える 3

2

はい、Scheme で名前を付ける方法defineですScheme の通常のリストでは、要素を変更することはできません。これは、不変であるためです。これは、機能的なデータ構造を操作するときに対処する方法を学ばなければならないことの 1 つです。もちろん、要素を追加したり要素を削除したりすることはできますが、これらの操作によって新しいリストが生成され、要素をその場で変更することはできません。

もう 1 つのオプションは、通常のリストの代わりに変更可能なリストを使用することですが、Scheme の使い方を学んでいるだけであれば、最初に変更不可能なリストに固執し、変更不可能なデータに関して処理を行うための Scheme の方法を学ぶことをお勧めします。

于 2012-04-02T22:57:35.383 に答える
1

はい、定義はSchemeで「割り当て」(実際には名前付け)を行う方法です。ただし、何らかのパッケージを作成している場合は、全体を関数内にラップしてから、 let を使用して参照するものを定義することを検討してください。

もちろん、「パッケージ」内の関数をアンラップするには、何らかの抽象化が必要です。

SICP 2.5 ジェネリック操作によるシステムの構築を参照してください。

http://mitpress.mit.edu/sicp/full-text/book/book-ZH-18.html#%_sec_2.5

于 2012-04-03T03:51:06.387 に答える
0

(append wordlist (element))新しいリストを作成しています。あなたが望むかもしれないのはset!、新しいリストへの参照をリダイレクトするために使用すること、またはdefine同じシンボルの名前を使用して新しいリストへの参照をリダイレクトすることです。

于 2012-04-02T22:51:36.097 に答える