CAR y CDR
car y cdr son operaciones primitivas sobre las celdas cons introducidas en el lenguaje de programación Lisp. Una celda cons se compone de dos punteros, la operación car extrae el primer puntero, y la operación cdr extrae el segundo. Por lo tanto, la expresión (car ) se evalúa como x, y (cdr ) se evalúa como y. Cuando las celdas cons son usadas para implementar listas enlazadas simples, la operación car devuelve el primer elemento de la lista, mientras que cdr devuelve el resto de la lista. Por esta razón, a las operaciones a veces se le dan los nombres de first y rest o head y tail.
From Wikipedia, the free encyclopedia
car y cdr son operaciones primitivas sobre las celdas cons (o "expresiones S no atómicas") introducidas en el lenguaje de programación Lisp. Una celda cons se compone de dos punteros, la operación car extrae el primer puntero, y la operación cdr extrae el segundo.
Por lo tanto, la expresión (car (cons x y)) se evalúa como x , y (cdr (cons x y)) se evalúa como y.
Cuando las celdas cons son usadas para implementar listas enlazadas simples (en vez de árboles y otras estructuras más complicadas), la operación car devuelve el primer elemento de la lista, mientras que cdr devuelve el resto de la lista. Por esta razón, a las operaciones a veces se le dan los nombres de first y rest o head y tail (primero y resto o cabeza y cola).
Lisp fue implementado originalmente en el computador IBM 704, a finales de los años 1950. El hardware del 704 tuvo un soporte especial para dividir una palabra de máquina de 36-bits en cuatro partes, una "address part" y "decrement part" ("parte dirección" y "parte decremento") de 15 bits cada una y una "prefix part" y "tag part" ("parte prefijo" y "parte tag") de tres bits cada una.
Precursores de Lisp incluye funciones:
- car abreviación de "Contents of the Address part of Register number" (Contenido de la parte dirección del número de registro),
- cdr "Contents of the Decrement part of Register number" (contenido de la parte decremento del número de registro),
- cpr "Contents of the Prefix part of Register number" (contenido de la parte prefijo del número de registro), y
- ctr "Contents of the Tag part of Register number" (contenido de la parte tag del número de registro),
cada uno de ellos tomaba una dirección de máquina como argumento, cargado la palabra correspondiente desde la memoria, y extrayendo los bits apropiados.
El macro de ensamblador del 704 para la instrucción cdr era:
LXD JLOC, 4 CLA 0,4 PDX 0,4 PXD 0,4[1]
Una palabra de máquina puede ser reensamblada por cons, que tomaba cuatro argumentos (a, d, p, t).
En las etapas iniciales del diseño de Lisp, las partes prefijo y tag eran descartadas dejando CAR, CDR, y un CONS de dos argumentos.[2]