Когда различные схемы не включают его, я часто видел, как atom?
определялся так:
(define (atom? x) (not (pair? x)))
Это вернет true, если x
не пара (или список). Он вернет true для чисел, строк, символов и символов, в то время как symbol?
вернет true только для символов, естественно. Это может или не может быть то, что вы хотите. Сравните пример Ясира Арсанукаева:
1 ]=> (map atom? (list 42 'a-symbol (list 12 13) 'foo "yiye!"))
;Value 13: (#t #t #f #t #t)
Используется pair?
, поскольку он проверяет правильность списков, таких как (1 2 3)
, пар, подобных (a . b)
, тогда как list?
возвращает false для пар с точками и списков с точечным хвостом.