;; File: /home/walker/public_html/courses/153.sp01/course.ss
;; Created: April 3, 2001
;; Last Revised: April 3, 2002
;; 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)))
)
)
)
)
)
;; A sequences of tests follows:
;(define myCourse (course "CSC" 153 4 "CS Fundamentals"))
;(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)