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