-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathejemplo-carrito-compra-declarativo.rkt
81 lines (62 loc) · 1.79 KB
/
ejemplo-carrito-compra-declarativo.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
#lang racket
;; Tda producto
(define (producto id nombre precio descuento stock id-tienda)
(list id nombre precio descuento stock id-tienda))
(define get-precio
(lambda (producto)
(caddr producto)))
(define get-descuento
(lambda (producto)
(cadddr producto)))
(define get-precio-con-descuento
(lambda (producto)
(- (get-precio producto)
(get-descuento producto))))
;; Tda carrito compra
(define (carrito usuario productos)
(list usuario productos))
(define get-productos-de-carrito
(lambda (carrito)
(cadr carrito)))
;; Ej: (get-precio-total-productos (list p1 p2))
(define get-precio-total-productos
(lambda (productos)
(apply +
(map get-precio productos))))
(define get-precio-con-descuento-productos
(lambda (productos)
(apply +
(map get-precio-con-descuento productos))))
(define get-precio-total-carrito
(lambda (mi-carrito)
(get-precio-total-productos
(get-productos-de-carrito mi-carrito))))
(define get-precio-descuento-carrito
(lambda (mi-carrito)
(get-precio-con-descuento-productos
(get-productos-de-carrito mi-carrito))))
;; Filter
(define get-productos-precio-menor
(lambda (productos precio)
(filter (lambda (producto)
(< (get-precio producto) precio))
productos)))
;; Currificado
(define is-precio-menor?
(lambda (producto precio)
(cond [ (< (get-precio
producto)
precio) #t]
[else #f])))
;; Script pruebas
(define p1 (producto 0 "mesa" 100 10 3 1))
(define p2 (producto 1 "silla" 50 5 2 1))
(define p3 (producto 2 "gameboy" 60 5 2 1))
(define c1 (carrito "gonzalo" (list p1 p2 p3)))
p1
p2
c1
(get-precio p1)
(get-precio-total-carrito c1)
(get-precio-descuento-carrito c1)
(get-productos-precio-menor (list p1 p2 p3) 60)