Functional Problem Solving (CSC 151 2014F) : Outlines

Outline 53: Objects in Scheme


Held: Monday, 8 December 2014

Back to Outline 52 - Merge Sort. On to Outline 54 - Objects in Scheme, Continued.

Summary

We begin to explore objects in Scheme. Objects encapsulate data and the procedures that work with those data.

Related Pages

Overview

Administrivia

Upcoming Work

Extra Credit Opportunities

Academic

Peer Support

Exam Questions

Motivating Problems

Compound Values

Objects: Encapsulating Values and Operations

Objects in Scheme

(define greeter
  (lambda (message)
    (cond 
      ((eq? message ':enter) (display "Hello") (newline))
      ((eq? message ':leave) (display "Goodbye") (newline))
      (else (error "Unknown Message")))))
> (greeter ':enter)
Hello
> (greeter ':leave)
Goodbye
> (greeter ':sleep)
Unknown Message

Adding State

(define fixed-value
  (let ((value 5))
    (lambda (message)
      (cond
        [(eq? message ':get) value]
        [else (error "fixed-value:" "unknown message")]))))
(define incrementable-value
  (let ((value (vector 0)))
    (lambda (message)
      (cond
        [(eq? message ':get) 
         (vector-ref value 0)]
        [(eq? message ':add1!)
         (vector-set! value 0 
                      (+ 1 (vector-ref value 0))))
        [else (error "fixed-value:" "unknown message")]))))
> (incrementable-value ':get)
0
> (incrementable-value ':add1!)
> (incrementable-value ':get)
1

Lab