;; 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))) ) ) ) ) )