Символы

Простые типы данных, которые были описаны ранее само вычислялись. То есть при вводе любого объекта этих типов в командную строку Scheme результат вычисления совпадал с тем, что вы ввели.

#t  =>  #t
42  =>  42
#\c =>  #\c

Символы ведут себя иначе, потому что символы используеются программами как идентификаторы переменных, следовательно вычисляются с результатом, который хранится в переменной. Не смотря на это, символы это простой тип данных, обладающий всеми возможностями такого типа: Scheme может передавать их наряду с char'ами, числами и пр.

Чтобы указать интерпретатору на то, что вы вводите символ, а не переменную, нужно взять символ в «цитату» (quote):

(quote xyz)
=>  xyz

Так как такое цитирование встречается часто, удобно использовать короткую версию:

'E

Scheme воспримет это также, как

(quote E)

Перевод этой главы еще не закончен!

Именами символов в Scheme могут быть только последовательности знаков. Единственное ограничение на имена символов - чтобы эти имена нельзя было спутать с другими данными, например, char, boolean, number, или структурами. Таким образом, this-is-a-symbol, i18n, ⇔, и $!#* - символы; 16, -i (комплексное число!), #t, «this-is-a-string», и (barf) (a list) - не могут быть символами. Проверочная функция для символов - symbol?:

(symbol? 'xyz) =>  #t
(symbol? 42)   =>  #f

Символы в Scheme обычно регистро-независимые. Так что символы Calorie и calorie одинаковы:

(eqv? 'Calorie 'calorie)
=>  #t

Мы можем использовать символ xyz в качестве глобальной переменной с помощью конструкции define:

(define xyz 9)

Этот код заносит значение 9 в символ xyz. Если мы попытаемся вычислить xyz в командной строке, то результатом будет значение в xyz:

xyz
=>  9

Мы можем использовать конструкцию set! для изменения значения, которое принимает переменная:

(set! xyz #\c)

После вычисления получаем:

xyz
=>  #\c

 
scheme/simvoly.txt · Последние изменения: 2010/02/02 08:47 От microfed
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki