acerca de definir-emparejar-expansión, hay materiales raros y códigos de ejemplo para ilustrar los conceptos. Estoy teniendo un momento difícil "decodificar" lo que dice la documentación:define-match-expander
(define-match-expander id proc-expr)
(define-match-expander id proc-expr proc-expr)
liga de identificación por un expansor partido.
La primera subexpresión de proc-expr debe evaluar a un transformador que produce una palmada para coincidencia. Cada vez que aparece el id como el comienzo de un patrón, se proporciona este transformador, al tiempo de expansión, un objeto de sintaxis correspondiente al patrón completo (incluido el id). El patrón es el reemplazado con el resultado del transformador .
Un transformador producido por una segunda subexpresión de proc-expr se utiliza cuando se usa id en un contexto de expresión. Usando el segundo proc-expr, id puede ser dando el significado tanto dentro como fuera de los patrones .
¿Alguien puede dar algunos ejemplos de códigos para ilustrar los dos usos del define-match-expander aquí?
para que su ejemplo muestra que 1 . si '(3 4 3) coincide con la forma como aba, el nuevo patrón. 2. ¿Puedes explicar cómo funciona el caso de sintaxis? No veo ningún lugar que pueda verificar un formulario. O diga: Supongo que x se une a 3, y se une a 4, pero donde muestra '(3 4 3) satisface el patrón a b a? –
o mi otro entendimiento es que: define-match-expander, define una nueva forma de patrón para ser utilizada en match. El caso de sintaxis, # '(list a b a) está en la posición de la cola, que será la expresión de retorno, que se usa para hacer coincidir' (3 4 3)? si coincide, la x se unirá a 3, y y a 4? ¿Están sucediendo estas cosas para el código de ejemplo? –
Sí, eso suena como un resumen plausible. Disculpas por mi uso del caso de sintaxis en lugar de las reglas de sintaxis más simples; Estoy acostumbrado a usar sintaxis-caso. –