Символы
Символы — это один из основных типов данных в Scheme, представляющий уникальные неизменяемые идентификаторы. В основном они используются в программах в качестве ключей, маркеров или заполнителей, что делает их незаменимыми для написания чистого и выразительного кода.
Символ в Scheme похож на строку, но отличается тем, что символы являются уникальными и атомарными. Это означает, что два символа с одинаковым именем гарантированно будут одним и тем же объектом, что позволяет быстро проверять равенство и эффективно использовать их в структурах данных.
Синтаксис
Символ записывается как последовательность символов:
- Начинается с буквы, за которой следуют буквы, цифры или специальные символы, например
-,+или*. - По умолчанию символы чувствительны к регистру.
Примеры:
'hello ; A symbol named `hello`
'foo-bar ; A symbol named `foo-bar`
'*special* ; A symbol named `*special*`Создание символов
Символы обычно создаются с помощью оператора quote ('), который указывает Scheme обрабатывать имя как символ, а не оценивать его как переменную или функцию.
Пример
'my-symbol ; Creates the symbol `my-symbol`Вы также можете создавать символы программным путем с помощью процедуры string->symbol, которая преобразует строку в символ.
(string->symbol "dynamic-symbol")Результат: 'dynamic-symbol
Сравнение символов
Поскольку символы уникальны, их можно эффективно сравнивать с помощью eq?.
Пример
(eq? 'apple 'apple) ; #t (same symbol)
(eq? 'apple 'orange) ; #f (different symbols)Это делает символы идеальными для использования в качестве ключей в структурах данных или маркеров в вашем коде.
Использование символов
Символы часто используются в схеме для:
- Ключи в списках ассоциаций:
(define alist '((name . "Alice") (age . 30) (city . "Paris")))
(assoc 'name alist) ; Returns (name . "Alice")- Идентификаторы в коде:
(define my-symbol 'foo)
(if (eq? my-symbol 'foo)
"It's foo!"
"It's something else.")Процедуры работы с символами
В Scheme предусмотрены встроенные процедуры для работы с символами:
| Процедура | Описание |
|---|---|
symbol? | Проверяет, является ли объект символом. |
eq? | Сравнивает два символа на предмет идентичности (быстрое сравнение). |
symbol->string | Преобразует символ в строку (полезно для отображения или отладки). |
string->symbol | Преобразует строку в символ (полезно для динамического создания идентификаторов). |
Примеры
(symbol? 'example) ; #t (true: it's a symbol)
(symbol->string 'example) ; "example"
(string->symbol "new-symbol") ; 'new-symbolРезюме
Символы — это простой и эффективный способ представления идентификаторов, ключей и маркеров в Scheme. Их неизменность и быстрая проверка подлинности делают их идеальными для многих задач программирования. Понимание того, как эффективно использовать символы, повысит вашу способность писать чистый и выразительный код Scheme.