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