Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Un par es una estructura de datos con dos campos,
- ; por razones históricas esos campos se llaman ´car´ y ´cdr´.
- ;
- ; Dado que es realmente estúpido llamarles así actualmente
- ; (http://www.iwriteiam.nl/HaCAR_CDR.html) se pueden usar ´first´ y ´rest´
- ; en lugar de ´car´ y ´cdr´ aunque en la materia no creo que lo vayan
- ; a permitir (facepalm me).
- ;
- ; Para crear pares se usa la función cons
- (define mi-par (cons 1 2))
- (define car-par (car mi-par))
- (define cdr-par (cdr mi-par))
- (define first-par (first mi-par))
- (define rest-par (rest mi-par))
- (printf "mi-par\t\t\t~a\n" mi-par)
- (printf "car de par\t\t~a\n" car-par)
- (printf "cdr de par\t\t~a\n" cdr-par)
- (printf "first de par\t\t~a\n" first-par)
- (printf "rest de par\t\t~a\n\n" rest-par)
- ; Los pares se usan para representar listas
- ; Una lista puede definirse en forma recursiva como
- ; una lista vacía o
- ; un par cuyo campo cdr es una lista
- ; () crea una lista vacía
- (define lista-vacia () )
- (printf "lista vacía\t\t~a\n\n" lista-vacia)
- ; Las listas vacías son especiales
- ; No son pares, su tamaño es cero y no tienen elementos
- ; cons permite añadir un elemento a una lista
- (define lista-cons (cons 4 () ))
- (printf "lista-cons\t\t~a\n" lista-cons)
- (printf "car de lista-cons\t~a\n" (car lista-cons))
- (printf "cdr de lista-cons\t~a\n\n" (cdr lista-cons))
- (define lista-cons-2 (cons 4 (cons 3 (cons 2 () ))))
- (printf "lista-cons-2\t\t~a\n" lista-cons-2)
- (printf "car de lista-cons-2\t~a\n" (car lista-cons-2))
- (printf "cdr de lista-cons-2\t~a\n\n" (cdr lista-cons-2))
- ; Que un par sea una lista depende del campo cdr
- ; la función ´(list? obj)´ nos permite saber si
- ; ´obj´ es una lista
- (define par-lista (cons 4 () ))
- (define par-no-lista (cons 4 3))
- (printf "par-lista\t\t~a\n" par-lista)
- (printf "car de par-lista\t~a\n" (car par-lista))
- (printf "cdr de par-lista\t~a\n" (cdr par-lista))
- (printf "par-lista es lista\t~a\n\n" (list? par-lista))
- (printf "par-no-lista\t\t~a\n" par-no-lista)
- (printf "car de par-no-lista\t~a\n" (car par-no-lista))
- (printf "cdr de par-no-lista\t~a\n" (cdr par-no-lista))
- (printf "par-no-lista es lista\t~a\n\n" (list? par-no-lista))
- ; Es posible crear listas dentro de listas
- (define listas-en-listas
- (cons
- (cons 4 (cons 3 () ))
- (cons
- (cons 2 (cons 1 () ))
- () )))
- (printf "listas-en-listas\t~a\n\n" listas-en-listas)
- ; Usar cons se hace bastante tedioso así que hay bastantes opciones de
- ; azucar sintáctico para crear listas
- (printf "list\t\t\t~a\n"
- (list 11 10 9 8))
- (printf "quote\t\t\t~a\n"
- (quote (7 6 5 4)))
- (printf "'\t\t\t~a\n"
- '(3 2 1 0))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement