Listas de asociaciones en LISP

Las listas de asociaciones en Lisp se utilizan para asignar valores a los elementos clave respectivos. También se les conoce como una lista. El coche del par representa el elemento clave mientras que cdr representa el valor asociado.

Creando una lista:

1. Uso de listas y contras: en este método, hacemos uso de listas y contras para crear nuestras listas.

Lisp

; Creating a list with name of the student
; as the key and marks as the value using list and 
; cons method
  
(defparameter *marks* (list (cons 'kishan 96) (cons 'saksham 92)))

 

2. Usar pairlis: otro método para la creación de listas es usar Pairlis, que elimina totalmente el uso de listas y contras.

Lisp

;Creating list using pairlis
  
(pairlis '(kishan saksham) '(96 98))

 

3. Usando acons: Se puede agregar un solo par a una lista usando la función acon.

Ejemplo 1:

Lisp

;Using acons to add pair
  
(defvar *marks* (pairlis '(Kishan Saksham) '(96 98)))
  
(defvar *new-marks* (acons 'shubh 91 *marks*))
  
(write(assoc 'shubh *new-marks*))

Producción:

 

Función de recuperación en la lista de asociaciones:

Para la recuperación de los datos de la lista, utilizamos una función assoc que se utiliza para devolver el valor correspondiente al elemento clave. Los parámetros que utiliza son clave, lista de asociaciones y algunas palabras clave de prueba como (clave, prueba, prueba-no). Tenga en cuenta que las palabras clave de prueba que utilizamos son totalmente opcionales.

Ejemplo 2: 

Lisp

; Lisp code for assoc
(defparameter *marks* (list (cons 'kishan 96) (cons 'saksham 92)))
  
(write(assoc 'kishan *marks*))

Producción:

 

Nota: si el elemento no está en la lista, la función assoc devolverá cero.

Ejemplo 3:

Lisp

; Lisp assoc returning nil in 
; case when value is not present
  
(defparameter *marks* (list (cons 'kishan 96) (cons 'saksham 92)))
  
(write(assoc 'sakshi *marks*))

Producción:

 

Actualización de los valores en una lista para algunos elementos clave:

En Lisp, hacemos uso de la macro setf cada vez que queremos realizar una actualización. De manera similar, usamos setf en las listas de asociación y también sus funcionalidades integradas para la actualización de valores. Tenga en cuenta que setf se usa junto con cdr ya que estamos actualizando la parte del valor y no accediendo a la clave.  

Ejemplo 4:

Lisp

; Updating the value associated with key "kishan"
  
(defparameter *marks* (list (cons 'kishan 96) (cons 'saksham 92)))
(setf (cdr (assoc 'kishan *marks*) )99)
(write(assoc 'kishan *marks*))

Producción:

 

La función rassoc:

En las listas de asociación, también podemos recuperar la clave en función del valor como un mapa bidireccional. Esto lo podemos hacer con la ayuda de la función rassoc, que es una función de asociación inversa.

Ejemplo 5:

Lisp

; Using the rassoc function
  
(defparameter *marks* (list (cons 'kishan 99) (cons 'saksham 92)))
  
(write(rassoc '99 *marks*))

Producción:

 

Publicación traducida automáticamente

Artículo escrito por kishanpandeyrkt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *