Home

Archivos

Buscar

Categorías

Feeds:

RSS / Atom

HDTP Capitulo 4 (2)· 20. December 2007, 23:52

Acabé el capítulo 4. Ultimamente no he podido avanzar en ruby ni en C#, pero por lo menos sigo con scheme.

;;4.4.1
;;interest : number->number
;;calcula el monto de interes ganado por a;o
(define (interest deposit)
  (* deposit (interest-rate deposit)))
;;interest-rate: number->number
(define (interest-rate deposit)
  (cond
    [(<= deposit 1000) 0.04]
    [(<= deposit 5000) 0.045]
    [ else 0.05]))
;;4.4.2
;;tax: number->number
;;devuelve el impuesto que se debe de acuerdo a la paga bruta
(define (tax gross-pay)
  (* gross-pay (tax-rate gross-pay)))
(define (tax-rate gross-pay)
  (cond
    [(<= gross-pay 240) 0]
    [(<= gross-pay 480) .15]
    [ else .28]))
;;netpay number->number
(define (netpay hours)
  (- (gross-pay hours) (tax (gross-pay hours))))
;;gross-pay number->number
(define hourly-pay 12)
(define (gross-pay hours)
  (* hours hourly-pay))
;;4.4.3
;;pay-back number->number
;;consumes charge amount and returns pay-back amount
(define (payback charge)
  (cond
    [(<= charge 500) (* charge 0.0025)]
    [(<= charge 1500) (+ (payback 500) (* (- charge 500) 0.005))]
    [(<= charge 2500) (+ (payback 1500) (* (- charge 1500) 0.0075))]
    [ else (+ (payback 2500) (* (- charge 2500) 0.01))]))
;;tests
(= (payback 400) 1)
(= (payback 1400) 5.75)
;;4.4.4
;;how-many : number,number,number->number
;;determina cuantas soluciones tiene una ecuacion cuadratica
(define (how-many a b c)
  (cond
    [ (= a 0) 1000]
    [ (> (sqr b) (* 4 (* a c))) 2]
    [ (< (sqr b) (* 4 (* a c))) 0]
    [ else 1]))
;tests
(= 2 (how-many 1 0 -1))
(= 1 (how-many 2 4 2))