;; File: /home/walker/public_html/courses/153.sp01/course.ss
;; Created: April 3, 2001
;; Last Revised: April 3, 2001
;; Descriptive information of a course
;; Intended as an example of a simple class
(define course
(lambda (subj . other-data)
(let (;; fields: listing of private data
(subject subj) ;; the subject or department name
(number 0) ;; the course number
(credits 0) ;; the number of credits
(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
(set! number (car other-data))
(set! credits (cadr other-data))
(set! title (caddr other-data))))
(lambda (op . parameters)
(case op
;; Extractors
;; One extractor is defined to return each field in turn
((getSubject) subject)
((getNumber) number)
((getCredits) credits)
((getTitle) title)
;; Modifiers
;; Specify course number and title
((setNumTitle)
(set! number (car parameters))
(set! title (cadr parameters)))
((setCredits)
(set! credits (car parameters)))
;; Data conversion
;; Return the fields in a string, in a nice format
((toString)
(string-append subject " " (number->string number) ": "
title (string #\newline)
" Credits: " (number->string credits) (string
#\newline)))
)
)
)
)
)