;; File: /home/walker/public_html/courses/153.sp01/course.ss
;; Created: April 3, 2001
;; Last Revised: January 13, 2012
;; Descriptive information of a course
;; Intended as an example of a simple class
;; Local field data stored within a vector
(define course
(lambda (subj . other-data)
(let (;; content: listing of private data as fields within a vector
(content (make-vector 4))
;;define positions within content as data elements
(subject 0)(number 1)(credits 2)(title 3))
;; initialize with default values
(vector-set! content subject subj) ;; the subject or department name
(vector-set! content number 0) ;; the course number
(vector-set! content credits 0) ;; the number of credits
(vector-set! content title "") ;; the name of the course
;; build a course, based on given information
(if (not (null? other-data))
(begin ;; initialization gives course number, credits, title
(vector-set! content number (car other-data))
(vector-set! content credits (cadr other-data))
(vector-set! content title (caddr other-data))))
(lambda (op . parameters)
(cond
;; Extractors
;; One extractor is defined to return each field in turn
((equal? op 'getSubject) (vector-ref content subject))
((equal? op 'getNumber) (vector-ref content number))
((equal? op 'getCredits) (vector-ref content credits))
((equal? op 'getTitle) (vector-ref content title))
;; Modifiers
;; Specify course number and title
((equal? op 'setNumTitle)
(vector-set! content number (car parameters))
(vector-set! content title (cadr parameters)))
((equal? op 'setCredits)
(vector-set! content credits (car parameters)))
;; Data conversion
;; Return the data fields in a string, in a nice format
((equal? op 'toString)
(string-append (vector-ref content subject)
" "
(number->string (vector-ref content number))
": "
(vector-ref content title)
(string #\newline)
" Credits: "
(number->string (vector-ref content credits))
(string #\newline)))
)
)
)
)
)
;; A sequences of tests follows:
(define myCourse (course "CSC" 207 4 "Algorithms and Object-Oriented Design"))
(define yourCourse (course "Math"))
;; test of initialization, toString, and extractor methods
(myCourse 'toString)
(yourCourse 'getSubject)
(yourCourse 'getNumber)
(yourCourse 'getTitle)
(yourCourse 'getCredits)
;; set fields
(yourCourse 'setNumTitle 131 "Calculus I")
(yourCourse 'setCredits 4)
;; print results of modification
(yourCourse 'toString)