最初に、私は、set!
スキームの割り当てが、=
とc/C++以外のPythonでの割り当てに似ていると考えました。 PythonでLocationはR6RSのスキームの意味は何ですか?
:
>>> x = 1
>>> id(x)
15855960
>>> x = 2
>>> id(x)
15855936 # different from above!
第割り当てはx
のメモリ位置に別の値の代わりに上書き元の値に変数/名前を再バインドします。
が、C/C++は、後者のケースである:
int x = 1;
cout << &x << endl; // 0x7ffe3e6adba4
x = 2;
cout << &x << endl; // 0x7ffe3e6adba4 (the same memory location!)
しかし1.3
でR6RSのセクション:
スキーム識別子が 値を含む位置を表すことができます。これらの識別子は変数と呼ばれます。多くの のケースでは、具体的には場所の値が決して変更されていない場合は、 という変数が作成された後、変数 をそのまま値として扱うと便利です。
そして1.8 Assignment
セクションで:
スキームの定義によってバインドされた変数や、聞かせたりラムダ 式は、実際にそれぞれのバインディングで指定されたオブジェクト に直接結合されていないが、これらのオブジェクトを含む場所 へ。これらの場所 の内容は、割り当てによって破壊的に変更することができます。
したがって、set!
は、C/C++の割り当て=
のようになりますか?最初x
で
=> (define x 10)
=> x
10
=> (set! x "lonnnnnnnnnnnnng")
=> x
"lonnnnnnnnnnnnng"
が小さい整数を格納するためのlocation
である:以下に説明する方法
しかし、その後。しかし後でset!
LONG文字列をその小さなメモリ位置に配置しますか?しかし、場所には私が思うほど十分なメモリスペースがありませんか?
お返事ありがとうございます!ですから、基本的に私は、実際には2つの意味を持つ「価値」という言葉を誤解していました。 2)ポインタ/実際の値への参照。そして、そのスキームは実際にはPythonに似ていますが、Pythonでは(例えば、小さな整数)を含むすべてがフードの下の参照/ポインタです。そうですか? – fubupc
はい、これがポイントです。 – Renzo