Advertisement
ganryu

Untitled

Oct 22nd, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.63 KB | None | 0 0
  1. ; Un par es una estructura de datos con dos campos,
  2. ; por razones históricas esos campos se llaman ´car´ y ´cdr´.
  3. ;
  4. ; Dado que es realmente estúpido llamarles así actualmente
  5. ; (http://www.iwriteiam.nl/HaCAR_CDR.html) se pueden usar ´first´ y ´rest´
  6. ; en lugar de ´car´ y ´cdr´ aunque en la materia no creo que lo vayan
  7. ; a permitir (facepalm me).
  8. ;
  9. ; Para crear pares se usa la función cons
  10. (define mi-par (cons 1 2))
  11. (define car-par (car mi-par))
  12. (define cdr-par (cdr mi-par))
  13. (define first-par (first mi-par))
  14. (define rest-par (rest mi-par))
  15.  
  16. (printf "mi-par\t\t\t~a\n" mi-par)
  17. (printf "car de par\t\t~a\n" car-par)
  18. (printf "cdr de par\t\t~a\n" cdr-par)
  19. (printf "first de par\t\t~a\n" first-par)
  20. (printf "rest de par\t\t~a\n\n" rest-par)
  21.  
  22. ; Los pares se usan para representar listas
  23. ; Una lista puede definirse en forma recursiva como
  24. ; una lista vacía o
  25. ; un par cuyo campo cdr es una lista
  26.  
  27. ; () crea una lista vacía
  28. (define lista-vacia () )
  29. (printf "lista vacía\t\t~a\n\n" lista-vacia)
  30.  
  31. ; Las listas vacías son especiales
  32. ; No son pares, su tamaño es cero y no tienen elementos
  33.  
  34. ; cons permite añadir un elemento a una lista
  35. (define lista-cons (cons 4 () ))
  36. (printf "lista-cons\t\t~a\n" lista-cons)
  37. (printf "car de lista-cons\t~a\n" (car lista-cons))
  38. (printf "cdr de lista-cons\t~a\n\n" (cdr lista-cons))
  39.  
  40. (define lista-cons-2 (cons 4 (cons 3 (cons 2 () ))))
  41. (printf "lista-cons-2\t\t~a\n" lista-cons-2)
  42. (printf "car de lista-cons-2\t~a\n" (car lista-cons-2))
  43. (printf "cdr de lista-cons-2\t~a\n\n" (cdr lista-cons-2))
  44.  
  45. ; Que un par sea una lista depende del campo cdr
  46. ; la función ´(list? obj)´ nos permite saber si
  47. ; ´obj´ es una lista
  48. (define par-lista (cons 4 () ))
  49. (define par-no-lista (cons 4 3))
  50.  
  51. (printf "par-lista\t\t~a\n" par-lista)
  52. (printf "car de par-lista\t~a\n" (car par-lista))
  53. (printf "cdr de par-lista\t~a\n" (cdr par-lista))
  54. (printf "par-lista es lista\t~a\n\n" (list? par-lista))
  55.  
  56. (printf "par-no-lista\t\t~a\n" par-no-lista)
  57. (printf "car de par-no-lista\t~a\n" (car par-no-lista))
  58. (printf "cdr de par-no-lista\t~a\n" (cdr par-no-lista))
  59. (printf "par-no-lista es lista\t~a\n\n" (list? par-no-lista))
  60.  
  61. ; Es posible crear listas dentro de listas
  62. (define listas-en-listas
  63.   (cons
  64.    (cons 4 (cons 3 () ))
  65.    (cons
  66.     (cons 2 (cons 1 () ))
  67.     () )))
  68.  
  69. (printf "listas-en-listas\t~a\n\n" listas-en-listas)
  70.  
  71. ; Usar cons se hace bastante tedioso así que hay bastantes opciones de
  72. ; azucar sintáctico para crear listas
  73. (printf "list\t\t\t~a\n"
  74.         (list 11 10 9 8))
  75.  
  76. (printf "quote\t\t\t~a\n"
  77.         (quote (7 6 5 4)))
  78.  
  79. (printf "'\t\t\t~a\n"
  80.        '(3 2 1 0))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement