Атом - это либо символ, символ, число, либо ноль.
(define (atom? a)
(or (symbol? a)
(char? a)
(number? a)
(null? a)))
Я думаю, что это все атомы, которые существуют, если вы найдете больше, добавьте к conditional expression
. Например, если вы думаете, что строка является атомом, добавьте (string? A), :-). Отсутствие определения для атома позволяет определить его так, как вы хотите. В конце концов, Схема не знает, что такое атом.
В Лиспе nil
- это атом, поэтому я сделал null
атомом. nil
также является списком по упрощению nil = (nil . nil)
, точно так же, как целые числа являются рациональными числами по упрощению, 2 = 2/1
, 2 является целым числом, 2/1 является рациональным числом, так как оба равны по упрощению рациональный; говорят, что целое число 2 также является рациональным числом. Но предикат списка уже определен в Scheme, не о чем беспокоиться.
О вопросе. Что касается меня, в Scheme есть предикаты только для типов классов, атом не является типом класса, атом - это абстракция, которая включает в себя несколько типов классов. Может быть, в этом причина. Но пара также не является типом класса, но она не включает в себя несколько типов классов, и все же некоторые могут рассматривать пару как тип класса.
Атом означает, что определенная вещь не является составной вещью. Одна из причин не включать такой предикат - это когда язык позволяет вам определять атомные типы, чтобы плетора атомов могла расти все шире и шире, и такой предикат не имел бы смысла. Я не знаю, допускает ли Схема это. Я могу только сказать, что предикаты Scheme (встроенные) являются конкретными. Вы можете спросить: это яблоко? , это апельсин? ; но вы не можете спросить это фрукт? . :-). Ну, вы можете, если вы делаете это самостоятельно. Несмотря на сказанное, в схеме есть общий предикат number?
и числовые предикаты integer?
, rational?
, real?
; несмотря на это, число можно рассматривать как тип класса (другие предикаты относятся к подтипам числа), тогда как атом не (по крайней мере, на схеме).
Примечание :
типы классов : типы, принадлежащие к определенному классу вещей. Пример: * +1032 *
число, целое, вещественное, рациональное, символ, процедура, список, вектор, строка и т. Д.