-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path02-2023-diurno-clase-miercoles20sept.rkt
121 lines (83 loc) · 2.3 KB
/
02-2023-diurno-clase-miercoles20sept.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#lang racket
;(define (nombre-fn arg1 arg2)
; (list arg1 arg2))
;(define nombre2-fn
; (lambda (arg1 arg2)
; (list arg1 arg2)))
; Dom: numero (number) -> args
; Rec: numero (number) -> retorno
(define (plus1 n)
(+ n 1))
; HIGH ORDER FUNCTIONS
; Dom: operacion (fn) X n1 (number) X n2 (number)
; Rec: number
(define (calculadora operacion n1 n2)
(operacion n1 n2))
;(calculadora suma 1 2)
;; (suma 1 2)
(define (suma n1 n2)
(+ n1 n2))
(define (resta n1 n2)
(- n1 n2))
;; Recursion ->
;; 1. MAP
;; fn X Lista = (fn * e1, fn * e2, fn *e3, fn .. * eN)
;; plus1 x (list 1 2 3) = (plus1 X 1, plus1 X 2, plus1X3)
;; = (2 3 4)
(define (estudiante id nombre rut promedio)
(list id nombre rut promedio))
(define (get-id estudiante)
(car estudiante))
(define (get-nombre estudiante)
(cadr estudiante))
(define (get-promedio estudiante)
(cadddr estudiante))
(define (estudiantes . args) args)
(define e1 (estudiante 1 "gonzalo" "18" 7))
(define e2 (estudiante 2 "braulio" "20" 2))
(define e3 (estudiante 3 "elias" "21" 4))
(define misEstudiantes (estudiantes e1 e2 e3))
misEstudiantes
;; (map fn lst)
(map get-id misEstudiantes)
(map get-nombre misEstudiantes)
;; 2. Filter
;; (filter fn lst)
;; Ejemplo: dada una lista-promedio, quiero obtener
;; todos los promedios mayores a 4
(define (es-mayor-a-4? promedio)
(>= promedio 4))
(filter es-mayor-a-4? (map get-promedio misEstudiantes))
;; OCUPANDO FUNCIONES ANONIMAS
;; Funciones anonimas: funcion sin nombre -> LAMBDA
(filter (lambda (n) (>= n 4))
(map get-promedio misEstudiantes))
(filter (lambda (estudiante) (>=
(get-promedio estudiante) 4))
misEstudiantes)
;; APPLY / REDUCE
(apply + (list 1 2 3 4))
;;; FIN HIGH ORDER FUNCTION
;; Currificacion
;; HASKELL CURRY: que las funciones solo pueden operar con
;; un argumento
;; -> CURRIFICACION
;; (fn arg) -> (fn arg)
;; (fn arg1 arg2) -> ((fn arg1) arg2))
;; (fn arg1 arg2 arg3) -> (((fn arg1) arg2) arg3)
(define (suma-nocurry n1 n2)
(+ n1 n2))
(define suma-curry
(lambda (n1)
(lambda (n2)
(+ n1 n2))))
((suma-curry 1) 2)
(define suma-curry3
(lambda (n1)
(lambda (n2)
(lambda (n3)
(+ n1 n2 n3)))))
(((suma-curry3 1) 2) 3)
;; Filter con currificacion
;; Map con currificacion
;; FIN CURRIFICACIÓN