Scheme / Dr Racket - manejo de struct y make

Continuación el primer ejercicio complejo de scheme, resuelto para que podáis ver un ejemplo claro de struct y su uso. 


Enunciado: un almacén de música tiene a la venta 4 CD, con los datos presentes en la estructura ya definida, un  cliente le dice, que si dentro de sus películas esta el titulo que busca, le compra las cuatro películas, sino, le compra la de menos valor.  Por tanto se debe construir un programa que permita mostrarle al cliente el mensaje de todas o una, y el precio a pagar por la(s) películas. 









; ==========================================================
(define-struct CD (titulo precio interprete))
(define-struct Precios (mensaje total))

(define cd1 (make-CD 'smells_like_teen_spirit 50000 'Nirvana))
(define cd2 (make-CD 'yesterday_is_dead_and_gone 50000 'Arch_enemy))
(define cd3 (make-CD 'corner 50000 'blue_Stahli))
(define cd4 (make-CD 'indestructible 50000 'Disturbed))

(define (ValorMenor cd1 cd2 cd3 cd4)
  (min (CD-precio cd1)(CD-precio cd2)(CD-precio cd3)(CD-precio cd4)))

  (define (valorTotal a b c d)
  (+ (CD-precio a)(CD-precio b)(CD-precio c)(CD-precio d)))


(define(compra cdA cdB cdC cdD titucliente)
  (cond
    [(not (or (symbol=? titucliente   (CD-titulo cdA))
         (symbol=? titucliente (CD-titulo cdB))   
         (symbol=? titucliente (CD-titulo cdC))        
         (symbol=? titucliente (CD-titulo cdD))))
     
   (make-Precios 'una (ValorMenor cdA cdB cdC cdD))]
    
    [(or (symbol=? titucliente   (CD-titulo cdA))
         (symbol=? titucliente (CD-titulo cdB))   
         (symbol=? titucliente (CD-titulo cdC))        
         (symbol=? titucliente (CD-titulo cdD)))
    (make-Precios 'Todas (valorTotal cdA cdB cdC cdD))]
    ))
  
  ;Prueba
(compra cd1 cd2 cd3 cd4 'smells_like_teen_spirit)
(compra cd1 cd2 cd3 cd4 'indestructible)
(compra cd1 cd2 cd3 cd4 'Linkinpar)

; ==========================================================
Compartir en facebook twitter Google tumblr pinterest

Entradas similares

0 Comentarios