;; 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 separate variables
(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)
(cond
;; Extractors
;; One extractor is defined to return each field in turn
((equal? op 'getSubject) subject)
((equal? op 'getNumber) number)
((equal? op 'getCredits) credits)
((equal? op 'getTitle) title)
;; Modifiers
;; Specify course number and title
((equal? op 'setNumTitle)
(set! number (car parameters))
(set! title (cadr parameters)))
((equal? op 'setCredits)
(set! credits (car parameters)))
;; Data conversion
;; Return the fields in a string, in a nice format
((equal? op '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" 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)