Advertisement
cardel

Ejemplos abstracción de tipos

Jun 22nd, 2016
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 5.21 KB | None | 0 0
  1. ;;#lang racket
  2.  
  3. ;;Viva Winterfell, siempre Univalluna :)
  4. ;; Ahora a nuestro Ewok revivido por
  5. ;las maravillas del Edo Tensei o por magia brujas rojas, le solicitan lo siguiente:
  6.  
  7. ;; Se requiere una función que tome
  8. ;una lista de bananas y cuente cuantas me he comido, sencillo no!:
  9.  
  10. (define listaMortal (list 'banana 'manzana 'perro 'gato 'gato 'manzana 'chanda 'manzana 'manzana 'banana))
  11.  
  12. (define listaEpicamenteMortal (list 1 'manzana 'perro 'gato 1'manzana 'chanda 'manzana 'manzana 'banana 1 1 2 3 2 'jaja 'gg 'izi 'bot))
  13.  
  14. ; list-of-symbol -> num
  15. (define (cuantasBananas lista)
  16.   (cond
  17.     [(empty? lista) 0]
  18.     [(cons? lista)
  19.      ;;Esto es lo mismo que preguntar (list? lista)
  20.      (cond
  21.        [(symbol=? (car lista) 'banana) ;;car = first
  22.          (+ 1 (cuantasBananas (cdr lista))) ;;cdr = rest
  23.         ]
  24.        [else (cuantasBananas (cdr lista))]
  25.        )
  26.      ]
  27.     )
  28.   )
  29.  
  30.  
  31. ;; Y vuelve el perro arrepentido!, ahora se requiere una función que tome una lista de manzanas y
  32. ;; cuente cuantas me he comido, sencillo no!:
  33.  
  34. (define (cuantasManzanas lista)
  35.   (cond
  36.     [(empty? lista) 0]
  37.     [(cons? lista)
  38.      ;;Esto es lo mismo que preguntar (list? lista)
  39.      (cond
  40.        [(symbol=? (car lista) 'manzana) ;;car = first
  41.          (+ 1 (cuantasManzanas (cdr lista))) ;;cdr = rest
  42.         ]
  43.        [else (+ 0 (cuantasManzanas (cdr lista)))]
  44.        )
  45.      ]
  46.     )
  47.   )
  48.  
  49. ;;Pos, que podemos hacer ahora y si me preguntan cuantos perros me he comido!!!
  50. ;;o si me preguntan por humanos o lombrices o otras cosas horribles, que hago
  51.  
  52.  
  53.  
  54. (define (cuantasCosas lista pregunta)
  55.   (cond
  56.     [(empty? lista) 0]
  57.     [(cons? lista)
  58.      ;;Esto es lo mismo que preguntar (list? lista)
  59.      (cond
  60.        [(symbol=? (car lista) pregunta) ;;car = first
  61.         (+ 1 (cuantasCosas (cdr lista) pregunta))  ;;cdr = rest
  62.         ]
  63.        [else (+ 0 (cuantasCosas  (cdr lista) pregunta)) ]
  64.        )
  65.      ]
  66.     )
  67.   )
  68.  
  69. (define (fun a) (* a a a))
  70.  
  71. ;;; (number -> number) list-of-number -> list-of-number
  72. ;;; (X -> X) list-of-X -> list-of-X
  73. (map fun '(1 2 3 4) )
  74.  
  75.  
  76. ;;Distancias
  77. ;; list-of-posn -> list-of-number
  78. (define (distancia-al-origen l)
  79.   (local
  80.     [(define (calcular-distancia pos)
  81.        (local
  82.          [(define x (posn-x pos))
  83.           (define y (posn-y pos))
  84.           ]
  85.          (sqrt (+ (* x x) (* y y)))
  86.          )
  87.        )
  88.      ]
  89.     ;(posn -> num) list-of-posn -> list-of-number
  90.     ;( X -> Y)  list-of-X -> list-of-Y
  91.     (map calcular-distancia l)
  92.     )
  93.   )
  94.  
  95. (define lista-distancias (list (make-posn 1 2) (make-posn 2 3)
  96.                                            (make-posn 4 3)
  97.                                            (make-posn 1 9)
  98.                                            )
  99.   )
  100.  
  101. ;list-of-num -> num
  102. (define (sum l)
  103.   ;((num num -> num) num list-of-num) -> num
  104.   (foldr + 0 l)
  105. )
  106. (define (product l) (foldr * 1 l))
  107.  
  108. ;;;
  109. (define (sumatoriapor2 lista)
  110.   (local
  111.     [(define (sumapor2 a b)
  112.        ;(* 2 (+ a b))
  113.        (+ (* 2 a) b)
  114.        )
  115.      ]
  116.     (foldr sumapor2 0 lista)
  117.     )
  118.   )
  119.  
  120.  
  121. ;;and-map or-map
  122.  
  123. (define (predicado a)
  124.   (< a 2)
  125.   )
  126.  
  127. (define listicaH '(1 2 3 4 5))
  128.  
  129. (ormap predicado listicaH)
  130. (andmap predicado listicaH)
  131.  
  132.  
  133. ;; Uso lambda
  134.  
  135. (define (sumaMortal a b)
  136.   ((lambda (x y) (+ x y)) a b))
  137.  
  138. (define (filtroAsesino l fruta1 fruta2)
  139.   (cond
  140.     [(empty? l) empty]
  141.     [(cons? l)
  142.      (local
  143.        [(define (predicado a)
  144.           (or
  145.            (symbol=? a fruta1)
  146.            (symbol=? a fruta2)
  147.            ))
  148.         (define llamado (filtroAsesino (rest l)
  149.                                        fruta1
  150.                                        fruta2
  151.                                        )
  152.           )
  153.         ]
  154.        
  155.        (cond
  156.          [(empty? l) empty]
  157.          [(predicado (first l))
  158.           llamado
  159.           ]
  160.          [else (cons (first l) llamado)]
  161.          )
  162.        )
  163.      ]
  164.     )
  165.   )
  166.   ;(sumaMortal 1 2)
  167. (define gato 'gato)
  168. (define apple 'apple)
  169. (filtroAsesino (list 'apple 'apple 'pera 'guayaba
  170.                         'chonta
  171.                         'banano
  172.                         'gato) 'apple 'gato)
  173.  
  174. ;; funcion con lambda
  175.  
  176.  
  177. (define (filtroAsesinoConLambda l fruta1 fruta2)
  178.   (cond
  179.     [(empty? l) empty]
  180.     [(cons? l)
  181.      (local
  182.        [
  183.         (define llamado (filtroAsesino (rest l)
  184.                                        fruta1
  185.                                        fruta2
  186.                                        )
  187.           )
  188.         ]
  189.        
  190.        (cond
  191.          [(empty? l) empty]
  192.          [(
  193.            (lambda (a)
  194.              (or
  195.               (symbol=? a fruta1)
  196.               (symbol=? a fruta2)
  197.               ) )
  198.            (first l))
  199.           llamado
  200.           ]
  201.          [else (cons (first l) llamado)]
  202.          )
  203.        )
  204.      ]
  205.     )
  206.   )
  207.  
  208. (filtroAsesinoConLambda (list 'apple 'apple 'pera 'guayaba
  209.                         'chonta
  210.                         'banano
  211.                         'gato) 'apple 'gato)
  212.  
  213.  
  214. (define (make-adder n)
  215. (lambda (m) (+ m n)))
  216.  
  217. (define (curry a)
  218.   (lambda (b)
  219.     (lambda (c)
  220.            (lambda (d)
  221.              (lambda (e)
  222.                (+ a b c d e)
  223.                )
  224.              )
  225.            )
  226.     )
  227.   )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement