#scheme
#схема
Вопрос:
Я пытаюсь понять, каков тип следующего утверждения в схеме:
#amp;a
каков тип приведенного выше выражения?
это комментарий?
Комментарии:
1. Для какой реализации схемы? Chicken, guile и kawa выдают синтаксические ошибки для этого.
Ответ №1:
В Racket — #amp;a
это неизменяемое поле, содержащее символ.
(box? #amp;a) ; #t
(unbox #amp;a) ; 'a
(symbol? (unbox #amp;a)) ; #t
(immutable? #amp;a) ; #t
Обратитесь к полям чтения.
Ответ №2:
#amp;a
недопустимый код схемы.
Все, что начинается с #
, обычно является каким-то макросом reader. В схеме все, начиная с чтения чисел в определенных базах, векторные литералы и логические значения начинаются с #
, и это остатки от временной схемы, которая интерпретировалась под хостом MacLISP. Он будет использовать макрос reader для выполнения правильных действий во время чтения. Сегодня Common Lisp обладает той же функциональностью.
Примеры:
'#(1 2 3) ; a vector of 3 elements
#f ; boolean false (everything else is thruthy)
#x10 ; 16 read in hexadecimal
Нередко реализация расширяет возможности за пределы отчета, и отчет не запрещает это. Таким образом, любая реализация может добавлять другие макросы reader, и это не повлияет на код Scheme, поскольку вы никогда не будете использовать их в коде Scheme, только на диалекте новой схемы разработчиков. Я не думаю, что существует одна реализация схемы, которая реализует только отчет и ничего больше.