Pārlūkot izejas kodu

finished work on oo implementation

Andrea Gus 9 gadi atpakaļ
vecāks
revīzija
13cadea389
1 mainītis faili ar 17 papildinājumiem un 9 dzēšanām
  1. 17 9
      scheme/scheme3.rkt

+ 17 - 9
scheme/scheme3.rkt

@@ -85,6 +85,14 @@
 (define (clone object)
   (hash-copy object))
 
+(define (dispatch object msg)
+  (if (eq? object 'unknown)
+      (error "unknown message" msg)
+      (let ((slot (hash-ref object msg 'unknown)))
+        (if (eq? slot 'unknown)
+            (dispatch (hash-ref object '<<parent>> 'unknown) msg)
+            slot))))
+
 (define-syntax !!
   (syntax-rules ()
     ((_ object msg new-val)
@@ -93,12 +101,12 @@
 (define-syntax ??
   (syntax-rules ()
     ((_ object msg)
-     (hash-ref object 'msg))))
+     (dispatch object 'msg))))
 
 (define-syntax ->
   (syntax-rules ()
     ((_ object msg arg ...)
-     ((hash-ref object 'msg) object arg ...))))
+     ((dispatch object 'msg) object arg ...))))
 
 (define Pino (new-object))
 (!! Pino name "Pino")
@@ -129,11 +137,11 @@
   (let ((o (new-object)))
     (!! o <<parent>> parent)
     o))
-(define (dispatch object msg)
-  (if (eq? object 'unknown)
-      (error "unknown message" msg)
-      (let ((slot (hash-ref object msg 'unknown)))
-        (if (eq? slot 'unknown)
-            (dispatch (hash-ref object '<<parent>> 'unknown) msg)
-            slot))))
+
+(define Glenn (son-of Pino))
+(!! Glenn name "Glenn")
+(!! Glenn age 50)
+
+(-> Glenn hello Pina)
+(?? Glenn age)