Advertisement
cardel

Untitled

Sep 11th, 2018
505
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 4.07 KB | None | 0 0
  1. #lang eopl
  2.  
  3. ;;Gramática del arbol ternario
  4. ;; <arbol-ternario> ::= <hoja> numero
  5. ;;                  ::= <nodo> simbolo <arbol-ternario> <arbol-ternario> <arbol-ternario>
  6.  
  7.  
  8. ;;Procedimientos constructores
  9. (define hoja
  10.   (lambda (num)
  11.     (list 'hoja num)
  12.     )
  13.   )
  14.  
  15. (define nodo
  16.   (lambda (key hi1 hi2 hi3)
  17.     (list 'nodo key hi1 hi2 hi3)))
  18.  
  19. ;;Procedimentos observadores
  20.  
  21. ;;Predicados
  22. (define hoja?
  23.   (lambda (exp)
  24.     (eqv? (car exp) 'hoja)))
  25.  
  26. (define nodo?
  27.   (lambda (exp)
  28.     (eqv? (car exp) 'nodo)))
  29.  
  30. ;;Extractores
  31. (define hoja->valor
  32.   (lambda (exp)
  33.     (cadr exp)))
  34.  
  35. (define nodo->key
  36.   (lambda (exp)
  37.     (cadr exp)))
  38.  
  39. (define nodo->hij1
  40.   (lambda (exp)
  41.     (caddr exp)))
  42.  
  43. (define nodo->hij2
  44.   (lambda (exp)
  45.     (cadddr exp)))
  46.  
  47. (define nodo->hij3
  48.   (lambda (exp)
  49.     (car (cddddr exp))))
  50.  
  51. ;;;Area del programador
  52. ;;;Ejemplos
  53. (define suma
  54.   (lambda (arb)
  55.     (cond
  56.       [(hoja? arb) (hoja->valor arb)]
  57.       [(nodo? arb) (+ (suma (nodo->hij1 arb))
  58.                         (suma (nodo->hij2 arb))
  59.                         (suma (nodo->hij3 arb)))]
  60.       [else (eopl:error "Esto no es un árbol")]
  61.       )))
  62.  
  63. (define arbol1
  64.   (nodo 'k
  65.         (nodo 'p (hoja 3) (hoja 5) (hoja 7))
  66.         (nodo 'l (hoja 8) (hoja 6) (hoja 11))
  67.         (hoja 12)
  68.         ))
  69.  
  70.  
  71. #lang eopl
  72.  
  73. ;;Gramática del arbol ternario
  74. ;; <arbol-ternario> ::= <hoja> numero
  75. ;;                  ::= <nodo> simbolo <arbol-ternario> <arbol-ternario> <arbol-ternario>
  76.  
  77.  
  78. ;;Procedimientos constructores
  79. (define hoja
  80.   (lambda (num)
  81.     (lambda (signal)
  82.       (cond
  83.         [(= signal 1) num]
  84.         [(= signal 2) 'hoja]
  85.         [(= signal 3) num]
  86.         [else (eopl:error "Señal no válida")]
  87.         )
  88.       )
  89.     )
  90.   )
  91.  
  92. (define nodo
  93.   (lambda (key hi1 hi2 hi3)
  94.     (lambda (signal)
  95.       (cond
  96.         [(= signal 1) (+
  97.                        (suma hi1)
  98.                        (suma hi2)
  99.                        (suma hi3))]
  100.         [(= signal 2) 'nodo]
  101.         [(= signal 3) key]
  102.         [(= signal 4) hi1]
  103.         [(= signal 5) hi2]
  104.         [(= signal 6) hi3]
  105.         [else (eopl:error "Señal no válida")])
  106.       )
  107.   )
  108. )
  109. ;;Procedimentos observadores
  110.  
  111. ;;Predicados
  112. (define hoja?
  113.   (lambda (exp)
  114.     (eqv? (exp 2) 'hoja)))
  115.  
  116. (define nodo?
  117.   (lambda (exp)
  118.     (eqv? (exp 2) 'nodo)))
  119.  
  120. ;;Extractores
  121. (define hoja->valor
  122.   (lambda (exp)
  123.     (exp 3)))
  124.  
  125. (define nodo->key
  126.   (lambda (exp)
  127.     (exp 3)))
  128.  
  129. (define nodo->hij1
  130.   (lambda (exp)
  131.     (exp 4)))
  132.  
  133. (define nodo->hij2
  134.   (lambda (exp)
  135.     (exp 5)))
  136.  
  137. (define nodo->hij3
  138.   (lambda (exp)
  139.     (exp 6)))
  140.  
  141. ;;;Area del programador
  142. ;;;Ejemplos
  143. (define sumaAntigua
  144.   (lambda (arb)
  145.     (cond
  146.       [(hoja? arb) (hoja->valor arb)]
  147.       [(nodo? arb) (+ (suma (nodo->hij1 arb))
  148.                         (suma (nodo->hij2 arb))
  149.                         (suma (nodo->hij3 arb)))]
  150.       [else (eopl:error "Esto no es un árbol")]
  151.       )))
  152.  
  153. (define suma
  154.   (lambda (arb)
  155.     (arb 1)))
  156.  
  157. (define arbol1
  158.   (nodo 'k
  159.         (nodo 'p (hoja 3) (hoja 5) (hoja 7))
  160.         (nodo 'l (hoja 8) (hoja 6) (hoja 11))
  161.         (hoja 12)
  162.         ))
  163.  
  164. #lang eopl
  165.  
  166. (define-datatype arbol-ternario arbol-ternario?
  167.   (hoja (dato number?))
  168.   (nodo (key symbol?)
  169.         (hi1 arbol-ternario?)
  170.         (hi2 arbol-ternario?)
  171.         (hi3 arbol-ternario?)))
  172.  
  173. (define suma
  174.   (lambda (arbol)
  175.     (cases arbol-ternario arbol
  176.         (hoja (dato) dato)
  177.         (nodo (key h1 h2 h3)
  178.               (+
  179.                (suma h1)
  180.                (suma h2)
  181.                (suma h3)))
  182.       )
  183.     )
  184.   )
  185.  
  186. (define arbol1
  187.   (nodo 'k
  188.         (nodo 'p (hoja 3) (hoja 5) (hoja 7))
  189.         (nodo 'l (hoja 8) (hoja 6) (hoja 11))
  190.         (hoja 12)
  191.         ))
  192.  
  193.  
  194. ;;Ejercicio
  195. <cola> := <cola-vacia>
  196.        := <cola-no-vacia> <cola> <int>
  197.        
  198. (cola-no-vacia (cola-no-vacia
  199.          (cola-no-vacia
  200.             (cola-no-vacia (cola-vacia) 3)
  201.               4)
  202.               5)
  203.               6)
  204.  
  205.  
  206. ;;top (Devuelve el primero de la cola)
  207. ;;pop (Devuelve la cola sin el primero)
  208. ;;suma (suma los elementos de la cola)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement