All pastes #2004835 Raw Edit

Miscellany

public text v1 · immutable
#2004835 ·published 2010-11-28 21:35 UTC
rendered paste body
;;;;;;;;;;;;;;;
; Self-test 6 ;
;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Production abstraction       ;
; pair:                        ;
; object 0: year               ;
; object 1: quantity in litres ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(define create-production ; creates a pair with the year of production and the quantity produced in that year, in litres
  (lambda (year litres)
    (cons year litres)
    )
  )

(define year-production ; returns the year of production of a given production
  (lambda (prod)
    (car prod)
    )
  )
    
(define quantity-producao ; returns the quantity produced in a given production
  (lambda (prod)
    (cdr prod)
    )
  )

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Parcel abstraction                            ;
; linked list:                                  ;
; object 0: id                                  ;
; object 1: pair (owner id, owner name)         ;
; object 2: list( production1, production2, etc ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(define create-parcel ; creates a parcel of land with an id code, a owner id code, a owner id name and no associated productions
  (lambda (id oid oname)
    (list id (cons oid oname) (list))
    )
  )

(define addd-prod-parcel ; adds a production object to the productions list of a parcel
  (lambda (parcel production)
    (append (list (car parcel) (cadr parcel)) (list (append (list production) (caddr parcel))))
    )
  )

(define prod-year-parcel ; returns the production for a given year uin a given parcel
  (lambda (parcel year)
    (letrec (
             (aux
              (lambda (production)
                (cond
                  ((null? production) 0)
                  ((= (year-production (car production)) year) (quantity-production (car production)))
                  (else (aux (cdr production)))
                  )
                )
              )
             )
      (aux (caddr parcel))
      )
    )
  )

(define avg-prod-parcel ; returns the average production for a given parcel, for all of its years
  (lambda (parcel)
    (letrec (
             (aux
              (lambda (production years sum)
                (cond
                  ((null? production)
                   (if (zero? years)
                       0
                       (/ sum years)
                       )
                   )
                  (else (aux (cdr production) (add1 years) (+ (quantity-production (car production)) sum)))
                  )
                )
              )
             )
      (aux (caddr parcel) 0 0)
      )
    )
  )

(define year-max-prod-parcel ; returns the year for which the highest production was registred, for a given parcel
  (lambda (parcel)
    (letrec (
             (aux
              (lambda (production max year)
                (cond
                  ((null? production) year)
                  (else
                   (if (> (quantity-production (car production)) max)
                       (aux (cdr production) (quantity-production (car production)) (year-production (car production)))
                       (aux (cdr production) max year)
                       )
                   )
                  )
                )
              )
             )
      (aux (caddr parcel) 0 0)
      )
    )
  )