Символи
Символи — один із основних типів даних у Scheme: унікальні незмінні ідентифікатори. Їх переважно використовують як ключі, маркери або заповнювачі, тому вони незамінні для чистого і виразного коду.
Символ у Scheme схожий на рядок, але відрізняється тим, що символи унікальні та атомарні. Два символи з однаковою назвою гарантовано є одним об’єктом, що дає швидку перевірку рівності та ефективне використання в структурах даних.
Синтаксис
Символ записують як послідовність символів:
- Починається з літери, далі — літери, цифри або спеціальні символи, наприклад
-,+або*. - За замовчуванням символи чутливі до регістру.
Приклади:
'hello ; Символ `hello`
'foo-bar ; Символ `foo-bar`
'*special* ; Символ `*special*`Створення символів
Символи зазвичай створюють оператором quote ('), який каже Scheme трактувати ім’я як символ, а не оцінювати його як змінну чи функцію.
Приклад
'my-symbol ; Створює символ `my-symbol`Символи також можна створювати програмно процедурою string->symbol, яка перетворює рядок на символ.
(string->symbol "dynamic-symbol")Результат: 'dynamic-symbol
Порівняння символів
Оскільки символи унікальні, їх ефективно порівнюють через eq?.
Приклад
(eq? 'apple 'apple) ; #t (той самий символ)
(eq? 'apple 'orange) ; #f (різні символи)Це робить символи ідеальними як ключі в структурах даних або маркери в коді.
Використання символів
У Scheme символи часто використовують для:
- Ключів у списках асоціацій:
(define alist '((name . "Alice") (age . 30) (city . "Paris")))
(assoc 'name alist) ; Повертає (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 (це символ)
(symbol->string 'example) ; "приклад"
(string->symbol "new-symbol") ; 'новий символПідсумок
Символи — легкий і ефективний спосіб представлення ідентифікаторів, ключів і маркерів у Scheme. Їхня незмінність і швидка перевірка ідентичності роблять їх ідеальними для багатьох завдань програмування. Розуміння символів покращить вашу здатність писати чистий і виразний код Scheme.