¿Cómo puedo verificar si algo es un átomo? Estoy buscando algo como number?
o list?
.Compruebe si un argumento es una lista o un átomo
Respuesta
Cuando varios esquemas no lo incluyen, a menudo he visto atom?
define de esta manera:
(define (atom? x) (not (pair? x)))
Esto devolverá verdadero si x
no es un par (o una lista). Volverá a ser verdadero para números, cadenas, caracteres y símbolos, mientras que symbol?
solo retornará verdadero para símbolos, naturalmente. Esto podría o no ser lo que quieres. Comparar el ejemplo de Yasir Arsanukaev:
1 ]=> (map atom? (list 42 'a-symbol (list 12 13) 'foo "yiye!"))
;Value 13: (#t #t #f #t #t)
Utiliza pair?
porque este comprueba para las listas adecuadas como (1 2 3)
, pares como (a . b)
, mientras list?
devolverá FALSE para pares de puntos y listas de puntos de cola.
Por lo general, tendrá que excluir la lista vacía también:
(define (atom? x) (not (or (pair? x) (null? x))))
o, si se quiere ser más pedante, a continuación, prohibir vectores también:
(define (atom? x) (not (or (pair? x) (null? x) (vector? x))))
Y, por supuesto puede agregar mucho más aquí, ya que está marcado como una pregunta de raqueta, es posible que desee agregar tablas hash, estructuras, etc. etc. Por lo tanto, puede ser más fácil especificar los tipos de valores que considera átomos:
(define (atom? x)
(ormap (lambda (p) (p x)) (list number? symbol? boolean? string?)))
o utilizando el sistema de contratación de la raqueta:
(define atom? (or/c number? symbol? boolean? string?))
- 1. Compruebe si un objeto es un NSArray o NSDictionary
- 2. Compruebe si un objeto es un delegado
- 3. compruebe si un objeto es nulo
- 4. Compruebe si una lista contiene un valor específico en Clojure
- 5. Compruebe si una ruta representa un archivo o una carpeta
- 6. Compruebe si el valor es un número
- 7. Compruebe si una matriz es un subconjunto de otra
- 8. Compruebe si una clase tiene un método
- 9. compruebe si un archivo es ejecutable
- 10. Compruebe si la entrada es una lista/tupla de cadenas o una sola cadena
- 11. Compruebe si un entero es una potencia entera de otro
- 12. Haskell: compruebe si es un número entero, o compruebe el tipo de variable
- 13. Compruebe si un UITableViewCell específico es visible en una UITableView
- 14. Compruebe si un formulario tiene una clave?
- 15. compruebe si una cadena es una URL
- 16. Compruebe si string es un prefijo de un Javascript RegExp
- 17. Compruebe si una variable es una matriz
- 18. Python: compruebe si un objeto es una secuencia
- 19. Compruebe si un usuario es root en una aplicación java
- 20. Compruebe si un objeto es una colección genérica
- 21. Compruebe si una función tiene un decorador
- 22. Compruebe si el argumento pasado es archivo o directorio en BASH
- 23. Compruebe si existe una inclusión (o requiere)
- 24. Python: prueba si un argumento es un número entero
- 25. Compruebe si un directorio es un (sistema de archivos) raíz
- 26. Compruebe si una ruta es absoluta o relativa
- 27. Compruebe si una ventana es emergente o no?
- 28. Determinar si un elemento es una cadena o una lista en Erlang
- 29. Boost: desreferencia un argumento de plantilla si es un puntero
- 30. Compruebe si un valor de scanf es un número?
En caso de que no está claro a partir de las respuestas a continuación: el término "átomo" se utiliza de manera diferente por diferentes autores y en diferentes sistemas. Si estás leyendo un texto en particular, probablemente quieras usar la definición de 'átomo' que figura en el texto. Esta es probablemente la razón principal por la que no hay 'átomo'. primitivo existe en el sistema que estás usando. –