в чем принципиальные различия переменных и символов? - PullRequest
2 голосов
/ 29 октября 2008

Я довольно смущен этим.

А каковы их отношения (например, как одно можно использовать в контексте другого)? Большое спасибо !!

Ответы [ 3 ]

3 голосов
/ 29 октября 2008

это то, что вы ищете ?

Символ - это просто объект с четырьмя полями:

  • имя (строка),
  • значение (некоторый объект Lisp),
  • функция (некоторый объект Lisp) и
  • список свойств (обычно список чередующихся пар ключевое слово / значение).

Что делает символы особенными, так это то, что обычно существует только один символ с данным именем, и этот символ упоминается по имени. Это делает символ удобным способом вызова данных по имени, то есть реализующих переменные . (Значение переменной хранится в слоте значения.)

Аналогично, на функции ссылаются по имени, а определение функции сохраняется в слоте функции символа. Это означает, что может быть отдельная функция и переменная с тем же именем.

Список свойств используется в качестве более общего механизма связывания дополнительных значений с конкретными именами, и снова пространство имен не зависит от пространств имен функций и переменных.

1 голос
/ 29 октября 2008

Проще говоря, переменная - это связь между символом и значением. Символ - это имя переменной. При оценке связанного символа (т. Е. Имени переменной) возвращается значение переменной

Вы также можете использовать символы, которые не являются переменными, т.е. имена, которые не связаны со значением. Вы не можете оценить несвязанный символ, хотя.

В Lisp-2 символ может быть связан одновременно со значением и функцией. Контекст определяет, является ли результат вычисления символа значением или функцией.

0 голосов
/ 29 октября 2008

Понятие символов немного сложно понять. (Даже я не уверен, что понял :))

Вы можете рассматривать символы как специальные переменные, которые ведут себя как константы. В памяти есть только один экземпляр, независимо от того, как часто вы его используете.

Преимущества - сохранение памяти, и можно увидеть, используется ли значение в манере, подобной константе. (Улучшает читабельность кода)

Вы можете делать подобные вещи в C / C ++ с typdef, в Java с static final или в Delphi / Pascal / VB с const, но будьте осторожны в этих и многих других На языках «символ» означает нечто иное.

...