¿Cómo añado a una alista en el esquema?

Agregar un elemento al jefe de una lista alistada (lista asociativa) es bastante simple:

> (cons '(ding . 53) '((foo . 42) (bar . 27)))
((ding . 53) (foo . 42) (bar . 27))

Agregar a la cola de una alista es un poco más complicado. Después de experimentar un poco, produje esto:

> (define (alist-append alist pair) `(,@alist ,pair))
> (alist-append '((foo . 42) (bar . 27)) '(ding . 53))
'((foo . 42) (bar . 27) (ding . 53))

Sin embargo, me parece que esta no es la solución idiomática. Entonces, ¿cómo se hace esto generalmente en el esquema? ¿O es este, de hecho, el camino?

0
agregado editado
Puntos de vista: 1
Yo también;) En serio, no es tan extraño como parece; Simplemente tiene una sintaxis divertida. Después de un tiempo, dejas de notar lo gracioso. Solo estoy haciendo trampas con el esquema, pero ya casi me he acostumbrado.
agregado el autor troelskn, fuente
Estoy asombrado de las personas que pueden entender idiomas como Scheme
agregado el autor Danimal, fuente

1 Respuestas

Common Lisp define una función llamada ACONS para este propósito, donde

(acons key value alist)

es equivalente a:

(cons (cons key value) alist)

Esto sugiere fuertemente que simplemente consultar a un alista es idiomático. Tenga en cuenta que esto significa dos cosas:

  1. Como las búsquedas generalmente se realizan de adelante hacia atrás, las asociaciones agregadas recientemente tienen prioridad sobre las más antiguas. Esto se puede usar para una implementación ingenua de entornos tanto léxicos como dinámicos.
  2. Si bien la lista es O (1), generalmente se agrega O (n), donde n es la longitud de la lista, por lo que el uso idiomático es mejor para el rendimiento y es preferible estilísticamente.
0
agregado