2

私はこれについてかなり混乱しています。

そして、それらの関係は何ですか (たとえば、一方を他方のコンテキストでどのように使用できるか)? どうもありがとう!

4

3 に答える 3

3

これはあなたが探しているものですか?

シンボルは、基本的に 4 つのフィールドを持つ単なるオブジェクトです。

  • 名前 (文字列)、
  • 値 (何らかの Lisp オブジェクト)、
  • 関数 (何らかの Lisp オブジェクト)、および
  • プロパティ リスト (通常は、キーワードと値のペアを交互に並べたリスト)。

シンボルを特別なものにしているのは、通常、特定の名前を持つシンボルは 1 つだけであり、シンボルは名前で参照されることです。これにより、シンボルは名前でデータを呼び出す、つまり変数を実装する便利な方法になります。(変数の値は値スロットに格納されます。)

同様に、関数は名前で参照され、関数の定義はシンボルの関数スロットに格納されます。これは、同じ名前の異なる関数と変数が存在できることを意味します。

プロパティ リストは、追加の値を特定の名前に関連付けるより一般的なメカニズムとして使用されます。ここでも、名前空間は関数および変数の名前空間から独立しています。

于 2008-10-29T07:40:26.120 に答える
1

簡単に言えば、変数はシンボルと値の間のバインディングです。シンボルは変数の名前です。バインドされたシンボル (つまり、変数名) が評価されると、変数値が返されます。

変数ではないシンボルを使用することもできます。値にバインドされていない名前。ただし、バインドされていないシンボルを評価することはできません。

Lisp-2 では、シンボルは値と関数の両方に同時にバインドできます。コンテキストは、シンボルを評価した結果が値であるか関数であるかを定義します。

于 2008-10-29T07:59:28.593 に答える
0

シンボルの概念は少しわかりにくいです。(私でさえ、私がそれを手に入れたかどうかはわかりません:))

シンボルは、定数のように振る舞う特別な変数と見なすことができます。どれだけ頻繁に使用しても、メモリ内には 1 つのインスタンスしかありません。

利点はメモリを節約することであり、値が定数のような方法で使用されているかどうかを確認できます。(コードの可読性が向上します)

C/C++ では、Java では、Delphi/Pascal/VBでは と同様のことができますが、注意してください。これらの言語や他の多くの言語では、「シンボル」は別のものを意味します。typdefstatic finalconst

于 2008-10-29T07:36:00.247 に答える