sequences – Anillos y secuencias

Pregunta:

Me sorprende que los anillos (de make-ring ) sean secuencias (satisfacen la sequencep ), pero no pueden ser operados por funciones de secuencia estándar ( length , elt , etc.).

Entonces, ¿qué implica ser una "secuencia"? El manual de Elisp dice que:

El tipo "secuencia" es la unión de otros dos tipos Lisp: listas y matrices. En otras palabras, cualquier lista es una secuencia y cualquier matriz es una secuencia. La propiedad común que tienen todas las secuencias es que cada una es una colección ordenada de elementos.

El diagrama del manual no incluye anillos. ¿Los anillos realmente deberían considerarse secuencias?

Respuesta:

La sequencep predicadosp devuelve un valor no nulo si su argumento es una lista o una matriz, y en este caso, "lista" incluye una celda de contras (un par de puntos). (sequencep '(a . b)) devuelve t .

(setq foo  (make-ring 3))

Ch v foo muestra que foo es (0 0 . [nil nil nil]) .

Entonces, un anillo es una secuencia, porque es una desventaja, pero una secuencia no es necesariamente un anillo.

Si sequencep debería comportarse de esta manera en Emacs Lisp es una buena pregunta. No corresponde a lo que Common Lisp considera una secuencia, por ejemplo. En Common Lisp, solo las listas adecuadas (con nil como último cdr) son secuencias, no listas con puntos.

Tiene la función ring-convert-sequence-to-ring , que devuelve un anillo que corresponde a su argumento de secuencia.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım