Каков тип следующего выражения в схеме?

#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, только на диалекте новой схемы разработчиков. Я не думаю, что существует одна реализация схемы, которая реализует только отчет и ничего больше.