Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define-struct celular (marca memoria espacio gama-alta? costo))
- (define-struct computador (marca procesador gama-alta? costo))
- (define-struct accesorio (nombre costo))
- (define-struct venta (producto cantidad))
- (define-struct costo-discriminado (subtotal iva icl total))
- (define celular1 (make-celular 'xiaomi 4 64 false 600000))
- (define computador1 (make-computador 'acer 'intel true 2500000))
- (define accesorio1 (make-accesorio 'raton 90000))
- (define venta1 (make-venta celular1 2))
- ;Autor: Juan Felipe Arango Guzman
- ;Fecha: 09/08/2020
- ;Contrato: venta-discriminada: venta -> costo-discriminado
- ;Proposito: calcular el costo de un producto con y sin los impuestos a los que aplica
- ;Ejemplos:
- ;(venta-discriminada venta1) (make-costo-discriminado 1200000 228000 120000 1548000)
- ;Definicion:
- (define (venta-discriminada venta)
- (cond
- [(not (venta? venta)) (error "la estuctura ingresada debe ser de tipo venta") ]
- [(celular? (venta-producto venta))
- (make-costo-discriminado (subtotal venta)
- (iva venta)
- (icl venta)
- (total venta))]
- [(computador? (venta-producto venta))
- (make-costo-discriminado (subtotal venta)
- (iva venta)
- (icl venta)
- (total venta))]
- [(accesorio? (venta-producto venta))
- (make-costo-discriminado (subtotal venta)
- (iva venta)
- (icl venta)
- (total venta))]
- [else "El producto ingresado no es valido"]
- )
- )
- ;Contrato: subtotal: venta -> numero
- (define (subtotal venta)
- (cond
- [(celular? (venta-producto venta))
- (* (venta-cantidad venta)
- (celular-costo (venta-producto venta)))]
- [(computador? (venta-producto venta))
- (* (venta-cantidad venta)
- (computador-costo (venta-producto venta)))]
- [(accesorio? (venta-producto venta))
- (* (venta-cantidad venta)
- (accesorio-costo (venta-producto venta)))]
- )
- )
- ;Contrato: iva: venta -> numero
- (define (iva venta)
- (cond
- [(celular? (venta-producto venta))
- (* 0.19
- (subtotal venta))]
- [(computador? (venta-producto venta))
- (* 0.19
- (subtotal venta))]
- [(accesorio? (venta-producto venta))
- (* 0.19
- (subtotal venta))]
- )
- )
- ;Contrato: icl: venta -> numero
- (define (icl venta)
- (cond
- [(celular? (venta-producto venta))
- (cond
- [(or (> (subtotal venta) 500000) (equal? true (celular-gama-alta? (venta-producto venta))))
- (* 0.10
- (subtotal venta))]
- [else 0]
- )]
- [(computador? (venta-producto venta))
- (cond
- [(or (> (subtotal venta) 500000) (equal? true (computador-gama-alta? (venta-producto venta))))
- (* 0.10
- (subtotal venta))]
- [else 0]
- )]
- [(accesorio? (venta-producto venta))
- (cond
- [(> (subtotal venta) 500000) (* 0.10 (subtotal venta))]
- [else 0]
- )]
- )
- )
- ;Contrato: total:
- (define (total venta)
- (+ (subtotal venta)
- (iva venta)
- (icl venta))
- )
- ;Pruebas:
- (check-expect (venta-discriminada venta1) (make-costo-discriminado 1200000 228000 120000 1548000))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement