• Domingo 28 de Abril de 2024, 17:15

Autor Tema:  Funcion De Acceso: Lisp  (Leído 1848 veces)

amimusa

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Funcion De Acceso: Lisp
« en: Viernes 3 de Septiembre de 2004, 14:46 »
0
Buenas compañer@s,
  Vereis, tengo examen el proximo lunes, por lo que una explicacion a esta duda urge ;-).
  Resulta que si hay definido una variable del tipo....

(defvar *reservas* '(
                 (r1 (tipo . refugio) (nombre . D205) (inicio 7 febrero 1996)
                     (fin 17 marzo 1996) (responsable "pepe"))
                 (r2 (tipo . albergue) (nombre . D403) (inicio 1 marzo 1996)
                     (fin 17 marzo 1996) (responsable "juan"))
                 (r3 (tipo . refugio) (nombre . D501) (inicio 7 febrero 1996)
                     (fin 17 marzo 1996) (responsable "luis"))
                 (r4 (tipo . refugio) (nombre . D100) (inicio 7 febrero 1996)
                     (fin 17 marzo 1996) (responsable "abdrés"))
                 (r5 (tipo . refugio) (nombre . D200) (inicio 7 febrero 1996)
                     (fin 17 marzo 1996) (responsable "julian"))))

Las funciones de acceso se definen de la siguiente manera:

Acceder al nombre:
   (defun nombre-reserva (reserva)
      (rest (assoc 'nombre (rest reserva)))
   )
 
El hecho de poner (rest (assoc 'nombre ( ... ))) lo entinedo perfectamente, ya que lo que hace es tomar el cdr de lo que devuelve el assoc, es decir el valor de la clave. Lo que no acabo de entender es porque lo aplica sobre el (rest reserva) ya que si hago un (rest *reservas*) lo que me devuelve es la lista de reservas sin la primera reserva, y no la lista de caracteristicas de la reserva.

Gracias.

amimusa

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Funcion De Acceso: Lisp
« Respuesta #1 en: Viernes 3 de Septiembre de 2004, 14:57 »
0
Que no se preocupe nadie, creo que ya se porque esta hecho asi. Se supone que la funcion de acceso se aplica sobre una linea de reserva, no sobre la BD de reservas. Eso ya se hara utilizando funciones como mapcar, me imagino. De esta forma, el (rest reserva) lo pone para aplicar el (assoc 'nombre ... ) sobre la lista de datos y dejar de lado el identificador de la reserva.

De todas formas, gracias por entrar a intenrar solucionar la duda.

Ciao.