about summary refs log tree commit diff stats
path: root/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4
diff options
context:
space:
mode:
authorelioat <elioat@tilde.institute>2023-08-23 07:52:19 -0400
committerelioat <elioat@tilde.institute>2023-08-23 07:52:19 -0400
commit562a9a52d599d9a05f871404050968a5fd282640 (patch)
tree7d3305c1252c043bfe246ccc7deff0056aa6b5ab /js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4
parent5d012c6c011a9dedf7d0a098e456206244eb5a0f (diff)
downloadtour-562a9a52d599d9a05f871404050968a5fd282640.tar.gz
*
Diffstat (limited to 'js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4')
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/data.scm78
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/geom.scm69
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html20
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=D;O=A20
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=D;O=D20
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=M;O=A20
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=M;O=D20
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=N;O=D20
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=S;O=A20
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=S;O=D20
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/msg.scm52
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/trydata.scm170
-rw-r--r--js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/type.scm83
13 files changed, 612 insertions, 0 deletions
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/data.scm b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/data.scm
new file mode 100644
index 0000000..3137436
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/data.scm
@@ -0,0 +1,78 @@
+(define (make-regular root)
+  (attach-type 'regular root))
+
+(define (make-es root)
+  (attach-type 'es root))
+
+(define (make-irreg fp sp tp)
+  (attach-type 'irreg (list fp sp tp)))
+
+(define (type thing)
+  (car thing))
+
+(define (contents thing)
+  (cdr thing))
+
+(define (attach-type type thing)
+  (cons type thing))
+
+(define (root thing)
+  thing)
+
+(define (fp thing)
+  (car thing))
+
+(define (sp thing)
+  (cadr thing))
+
+(define (tp thing)
+  (caddr thing))
+
+(define (add-s wd)
+  (word wd 's))
+
+(define (add-es wd)
+  (word wd 'es))
+
+(define eat (make-regular 'eat))
+(define drink (make-regular 'drink))
+(define go (make-es 'go))
+(define box (make-es 'box))
+(define be (make-irreg 'am 'are 'is))
+
+(define (operate op obj)
+  (let ((proc (get (type obj) op)))
+    (if (not (null? proc))
+	(proc (contents obj))
+	(error "Undefined operator" (list op obj)))))
+
+(define (fps obj) (operate 'fps obj))
+(define (sps obj) (operate 'sps obj))
+(define (tps obj) (operate 'tps obj))
+(define (fpp obj) (operate 'fpp obj))
+(define (spp obj) (operate 'spp obj))
+(define (tpp obj) (operate 'tpp obj))
+
+(put 'regular 'fps root)
+(put 'regular 'sps root)
+(put 'regular 'tps (lambda (x) (add-s (root x))))
+(put 'regular 'fpp root)
+(put 'regular 'spp root)
+(put 'regular 'tpp root)
+
+(put 'es 'fps root)
+(put 'es 'sps root)
+(put 'es 'tps (lambda (x) (add-es (root x))))
+(put 'es 'fpp root)
+(put 'es 'spp root)
+(put 'es 'tpp root)
+
+(put 'irreg 'fps fp)
+(put 'irreg 'sps sp)
+(put 'irreg 'tps tp)
+(put 'irreg 'fpp sp)
+(put 'irreg 'spp sp)
+(put 'irreg 'tpp sp)
+
+
+
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/geom.scm b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/geom.scm
new file mode 100644
index 0000000..dd47bd1
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/geom.scm
@@ -0,0 +1,69 @@
+(define pi 3.141592654)
+
+;; tagged data
+
+(define attach-tag cons)
+(define type-tag car)
+(define contents cdr)
+
+(define (make-square side)
+  (attach-tag 'square side))
+
+(define (make-circle radius)
+  (attach-tag 'circle radius))
+
+;; conventional style
+
+(define (area shape)
+  (cond ((eq? (type-tag shape) 'square)
+	 (* (contents shape) (contents shape)))
+	((eq? (type-tag shape) 'circle)
+	 (* pi (contents shape) (contents shape)))
+	(else (error "Unknown shape -- AREA"))))
+
+(define (perimeter shape)
+  (cond ((eq? (type-tag shape) 'square)
+	 (* 4 (contents shape)))
+	((eq? (type-tag shape) 'circle)
+	 (* 2 pi (contents shape)))
+	(else (error "Unknown shape -- PERIMETER"))))
+
+;; Data-directed programming
+
+(put 'square 'area (lambda (s) (* s s)))
+(put 'circle 'area (lambda (r) (* pi r r)))
+(put 'square 'perimeter (lambda (s) (* 4 s)))
+(put 'circle 'perimeter (lambda (r) (* 2 pi r)))
+
+(define (operate op obj)
+  (let ((proc (get (type-tag obj) op)))
+    (if proc
+	(proc (contents obj))
+	(error "Unknown operator for type"))))
+
+(define (area shape)
+  (operate 'area shape))
+
+(define (perimeter shape)
+  (operate 'perimeter shape))
+
+;; message passing
+
+(define (make-square side)
+  (lambda (message)
+    (cond ((eq? message 'area)
+	   (* side side))
+	  ((eq? message 'perimeter)
+	   (* 4 side))
+	  (else (error "Unknown message")))))
+
+(define (make-circle radius)
+  (lambda (message)
+    (cond ((eq? message 'area)
+	   (* pi radius radius))
+	  ((eq? message 'perimeter)
+	   (* 2 pi radius))
+	  (else (error "Unknown message")))))
+
+(define (operate op obj)
+  (obj op))
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html
new file mode 100644
index 0000000..32b7c99
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+  <title>Index of /~bh/61a-pages/Lectures/2.4</title>
+ </head>
+ <body>
+<h1>Index of /~bh/61a-pages/Lectures/2.4</h1>
+  <table>
+   <tr><th valign="top"><img src="../../../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html?C=N%3BO=D">Name</a></th><th><a href="index.html?C=M%3BO=A">Last modified</a></th><th><a href="index.html?C=S%3BO=A">Size</a></th><th><a href="index.html?C=D%3BO=A">Description</a></th></tr>
+   <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="../../../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../Lectures">Parent Directory</a>       </td><td>&nbsp;</td><td align="right">  - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/bnf">bnf</a>                    </td><td align="right">2000-05-30 12:38  </td><td align="right">852 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="data.scm">data.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="geom.scm">geom.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="msg.scm">msg.scm</a>                </td><td align="right">2000-05-30 12:38  </td><td align="right">1.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/text.gif" alt="[TXT]"></td><td><a href="trydata.scm">trydata.scm</a>            </td><td align="right">2000-05-30 12:38  </td><td align="right">5.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="type.scm">type.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.7K</td><td>&nbsp;</td></tr>
+   <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=D;O=A b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=D;O=A
new file mode 100644
index 0000000..be6d42d
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=D;O=A
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+  <title>Index of /~bh/61a-pages/Lectures/2.4</title>
+ </head>
+ <body>
+<h1>Index of /~bh/61a-pages/Lectures/2.4</h1>
+  <table>
+   <tr><th valign="top"><img src="../../../../icons/blank.gif" alt="[ICO]"></th><th><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/?C=N;O=A">Name</a></th><th><a href="index.html?C=M%3BO=A">Last modified</a></th><th><a href="index.html?C=S%3BO=A">Size</a></th><th><a href="index.html?C=D%3BO=D">Description</a></th></tr>
+   <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="../../../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../Lectures">Parent Directory</a>       </td><td>&nbsp;</td><td align="right">  - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/bnf">bnf</a>                    </td><td align="right">2000-05-30 12:38  </td><td align="right">852 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="data.scm">data.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="geom.scm">geom.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="msg.scm">msg.scm</a>                </td><td align="right">2000-05-30 12:38  </td><td align="right">1.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/text.gif" alt="[TXT]"></td><td><a href="trydata.scm">trydata.scm</a>            </td><td align="right">2000-05-30 12:38  </td><td align="right">5.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="type.scm">type.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.7K</td><td>&nbsp;</td></tr>
+   <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=D;O=D b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=D;O=D
new file mode 100644
index 0000000..8732d2d
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=D;O=D
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+  <title>Index of /~bh/61a-pages/Lectures/2.4</title>
+ </head>
+ <body>
+<h1>Index of /~bh/61a-pages/Lectures/2.4</h1>
+  <table>
+   <tr><th valign="top"><img src="../../../../icons/blank.gif" alt="[ICO]"></th><th><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/?C=N;O=A">Name</a></th><th><a href="index.html?C=M%3BO=A">Last modified</a></th><th><a href="index.html?C=S%3BO=A">Size</a></th><th><a href="index.html?C=D%3BO=A">Description</a></th></tr>
+   <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="../../../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../Lectures">Parent Directory</a>       </td><td>&nbsp;</td><td align="right">  - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="type.scm">type.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.7K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/text.gif" alt="[TXT]"></td><td><a href="trydata.scm">trydata.scm</a>            </td><td align="right">2000-05-30 12:38  </td><td align="right">5.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="msg.scm">msg.scm</a>                </td><td align="right">2000-05-30 12:38  </td><td align="right">1.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="geom.scm">geom.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="data.scm">data.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/bnf">bnf</a>                    </td><td align="right">2000-05-30 12:38  </td><td align="right">852 </td><td>&nbsp;</td></tr>
+   <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=M;O=A b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=M;O=A
new file mode 100644
index 0000000..6c82bac
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=M;O=A
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+  <title>Index of /~bh/61a-pages/Lectures/2.4</title>
+ </head>
+ <body>
+<h1>Index of /~bh/61a-pages/Lectures/2.4</h1>
+  <table>
+   <tr><th valign="top"><img src="../../../../icons/blank.gif" alt="[ICO]"></th><th><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/?C=N;O=A">Name</a></th><th><a href="index.html?C=M%3BO=D">Last modified</a></th><th><a href="index.html?C=S%3BO=A">Size</a></th><th><a href="index.html?C=D%3BO=A">Description</a></th></tr>
+   <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="../../../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../Lectures">Parent Directory</a>       </td><td>&nbsp;</td><td align="right">  - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/bnf">bnf</a>                    </td><td align="right">2000-05-30 12:38  </td><td align="right">852 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="data.scm">data.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="geom.scm">geom.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="msg.scm">msg.scm</a>                </td><td align="right">2000-05-30 12:38  </td><td align="right">1.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/text.gif" alt="[TXT]"></td><td><a href="trydata.scm">trydata.scm</a>            </td><td align="right">2000-05-30 12:38  </td><td align="right">5.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="type.scm">type.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.7K</td><td>&nbsp;</td></tr>
+   <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=M;O=D b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=M;O=D
new file mode 100644
index 0000000..8732d2d
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=M;O=D
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+  <title>Index of /~bh/61a-pages/Lectures/2.4</title>
+ </head>
+ <body>
+<h1>Index of /~bh/61a-pages/Lectures/2.4</h1>
+  <table>
+   <tr><th valign="top"><img src="../../../../icons/blank.gif" alt="[ICO]"></th><th><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/?C=N;O=A">Name</a></th><th><a href="index.html?C=M%3BO=A">Last modified</a></th><th><a href="index.html?C=S%3BO=A">Size</a></th><th><a href="index.html?C=D%3BO=A">Description</a></th></tr>
+   <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="../../../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../Lectures">Parent Directory</a>       </td><td>&nbsp;</td><td align="right">  - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="type.scm">type.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.7K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/text.gif" alt="[TXT]"></td><td><a href="trydata.scm">trydata.scm</a>            </td><td align="right">2000-05-30 12:38  </td><td align="right">5.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="msg.scm">msg.scm</a>                </td><td align="right">2000-05-30 12:38  </td><td align="right">1.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="geom.scm">geom.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="data.scm">data.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/bnf">bnf</a>                    </td><td align="right">2000-05-30 12:38  </td><td align="right">852 </td><td>&nbsp;</td></tr>
+   <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=N;O=D b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=N;O=D
new file mode 100644
index 0000000..8732d2d
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=N;O=D
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+  <title>Index of /~bh/61a-pages/Lectures/2.4</title>
+ </head>
+ <body>
+<h1>Index of /~bh/61a-pages/Lectures/2.4</h1>
+  <table>
+   <tr><th valign="top"><img src="../../../../icons/blank.gif" alt="[ICO]"></th><th><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/?C=N;O=A">Name</a></th><th><a href="index.html?C=M%3BO=A">Last modified</a></th><th><a href="index.html?C=S%3BO=A">Size</a></th><th><a href="index.html?C=D%3BO=A">Description</a></th></tr>
+   <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="../../../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../Lectures">Parent Directory</a>       </td><td>&nbsp;</td><td align="right">  - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="type.scm">type.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.7K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/text.gif" alt="[TXT]"></td><td><a href="trydata.scm">trydata.scm</a>            </td><td align="right">2000-05-30 12:38  </td><td align="right">5.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="msg.scm">msg.scm</a>                </td><td align="right">2000-05-30 12:38  </td><td align="right">1.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="geom.scm">geom.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="data.scm">data.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/bnf">bnf</a>                    </td><td align="right">2000-05-30 12:38  </td><td align="right">852 </td><td>&nbsp;</td></tr>
+   <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=S;O=A b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=S;O=A
new file mode 100644
index 0000000..8611b4d
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=S;O=A
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+  <title>Index of /~bh/61a-pages/Lectures/2.4</title>
+ </head>
+ <body>
+<h1>Index of /~bh/61a-pages/Lectures/2.4</h1>
+  <table>
+   <tr><th valign="top"><img src="../../../../icons/blank.gif" alt="[ICO]"></th><th><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/?C=N;O=A">Name</a></th><th><a href="index.html?C=M%3BO=A">Last modified</a></th><th><a href="index.html?C=S%3BO=D">Size</a></th><th><a href="index.html?C=D%3BO=A">Description</a></th></tr>
+   <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="../../../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../Lectures">Parent Directory</a>       </td><td>&nbsp;</td><td align="right">  - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/bnf">bnf</a>                    </td><td align="right">2000-05-30 12:38  </td><td align="right">852 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="msg.scm">msg.scm</a>                </td><td align="right">2000-05-30 12:38  </td><td align="right">1.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="data.scm">data.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="geom.scm">geom.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="type.scm">type.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.7K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/text.gif" alt="[TXT]"></td><td><a href="trydata.scm">trydata.scm</a>            </td><td align="right">2000-05-30 12:38  </td><td align="right">5.0K</td><td>&nbsp;</td></tr>
+   <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=S;O=D b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=S;O=D
new file mode 100644
index 0000000..d0eaab1
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/index.html?C=S;O=D
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+  <title>Index of /~bh/61a-pages/Lectures/2.4</title>
+ </head>
+ <body>
+<h1>Index of /~bh/61a-pages/Lectures/2.4</h1>
+  <table>
+   <tr><th valign="top"><img src="../../../../icons/blank.gif" alt="[ICO]"></th><th><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/?C=N;O=A">Name</a></th><th><a href="index.html?C=M%3BO=A">Last modified</a></th><th><a href="index.html?C=S%3BO=A">Size</a></th><th><a href="index.html?C=D%3BO=A">Description</a></th></tr>
+   <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="../../../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../Lectures">Parent Directory</a>       </td><td>&nbsp;</td><td align="right">  - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/text.gif" alt="[TXT]"></td><td><a href="trydata.scm">trydata.scm</a>            </td><td align="right">2000-05-30 12:38  </td><td align="right">5.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="type.scm">type.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.7K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="geom.scm">geom.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="data.scm">data.scm</a>               </td><td align="right">2000-05-30 12:38  </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="msg.scm">msg.scm</a>                </td><td align="right">2000-05-30 12:38  </td><td align="right">1.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="../../../../icons/unknown.gif" alt="[   ]"></td><td><a href="https://people.eecs.berkeley.edu/~bh/61a-pages/Lectures/2.4/bnf">bnf</a>                    </td><td align="right">2000-05-30 12:38  </td><td align="right">852 </td><td>&nbsp;</td></tr>
+   <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/msg.scm b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/msg.scm
new file mode 100644
index 0000000..a82f298
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/msg.scm
@@ -0,0 +1,52 @@
+(define (make-regular root)
+  (lambda (msg)
+    (cond ((eq? msg 'fps) root)
+	  ((eq? msg 'sps) root)
+	  ((eq? msg 'tps) (add-s root))
+	  ((eq? msg 'fpp) root)
+	  ((eq? msg 'spp) root)
+	  ((eq? msg 'tpp) root))))
+
+(define (make-es root)
+  (lambda (msg)
+    (cond ((eq? msg 'fps) root)
+	  ((eq? msg 'sps) root)
+	  ((eq? msg 'tps) (add-es root))
+	  ((eq? msg 'fpp) root)
+	  ((eq? msg 'spp) root)
+	  ((eq? msg 'tpp) root))))
+
+(define (make-irreg fp sp tp)
+  (lambda (msg)
+    (cond ((eq? msg 'fps) fp)
+	  ((eq? msg 'sps) sp)
+	  ((eq? msg 'tps) tp)
+	  ((eq? msg 'fpp) sp)
+	  ((eq? msg 'spp) sp)
+	  ((eq? msg 'tpp) sp))))
+
+(define (operate op obj)
+  (obj op))
+
+(define (fps obj) (operate 'fps obj))
+(define (sps obj) (operate 'sps obj))
+(define (tps obj) (operate 'tps obj))
+(define (fpp obj) (operate 'fpp obj))
+(define (spp obj) (operate 'spp obj))
+(define (tpp obj) (operate 'tpp obj))
+
+
+(define (add-s wd)
+  (word wd 's))
+
+(define (add-es wd)
+  (word wd 'es))
+
+(define eat (make-regular 'eat))
+(define drink (make-regular 'drink))
+(define go (make-es 'go))
+(define box (make-es 'box))
+(define be (make-irreg 'am 'are 'is))
+
+
+
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/trydata.scm b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/trydata.scm
new file mode 100644
index 0000000..f37c4a7
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/trydata.scm
@@ -0,0 +1,170 @@
+~cs60a/lectures/2.3/trydata.scm
+
+ Conjugating verbs example...  notes for 29 Sept 1993
+
+We could start with
+
+(define (tps v); third person singular version of verb v
+  (cond((equal? v 'eat) 'eats)  ; he eats
+       ((equal? v 'drink) 'drinks)
+       ((equal? v 'go)  'goes)
+....
+       (else (error "unknown verb"))))
+
+We need a total of six programs. Maintaining this would be really terrible.
+
+
+Let us take a really crude first approach with tables.
+(These are sometimes referred to as properties... e.g.
+put the 'fps property of the 'eat word to ....)
+ We could do this:
+
+(put 'eat 'fps 'eat)  ; I eat    (get 'eat 'fps) --> eat
+(put 'eat 'sps 'eat)  ; You eat
+(put 'eat 'tps 'eats) ; He eats  (get 'eat 'tps) -->  eats
+(put 'eat 'fpp 'eat)  ; We eat
+(put 'eat 'spp 'eat)  ; You eat
+(put 'eat 'tps 'eat)  ; They eat
+
+;;; etc for all other verbs.
+
+then
+(define (tps verb)  (get verb 'tps))
+(define (sps verb)  (get verb 'sps)) ;etc. for 4 more
+
+The advantage here is that we can add new verbs and not rewrite programs.
+
+The problems:  this wastes a lot of table space and still not very robust.
+(tps 'nonsense) --> ()  (no error message)
+
+more robust six programs, each looking like this:
+
+(define (tps verb)(let((answer (get verb 'tps)))
+		    (if (not (null? answer)) answer
+			(error 'tps "bad verb ~s~%" verb))))
+
+Now, to reduce space consumption....
+
+solution:  group verbs by type
+                      "regular"  (just add -s in tps)  as eat, drink
+                           -es       (just add -es in tps) as go, box
+                      "irregular" (refer to list) be: (am are is are are are)
+
+Then all we have to do is say that a verb is regular, and all its forms
+are known.  We store most of the info on the TYPE not the data. Here's how:
+
+(put 'eat 'verb-type 'regular)
+
+(define (type-of-verb v) (get v 'verb-type))
+
+(put 'fps 'regular root)  ; I eat, drink
+(put 'sps 'regular root)  ; you eat, drink
+(put 'tps 'regular (lambda(x)( add-s (root x))))  ; he eats, drinks
+(put 'fpp 'regular root)  ; We eat, drink
+etc.
+
+
+Now we can write 
+
+(define (tps verb) ;; third person singular
+  (let ((proc (get (type-of-verb verb) 'tps)))
+
+   ;; either proc is ()  i.e. not found  or we can
+   ;; apply it to the root  verb:
+
+    (if (not (null? proc)) (proc verb))
+	(error 'tps "I don't know about verb ~s~% " verb))))
+
+we need a total of six such programs..
+
+...
+
+How about using manifest types?  Earlier we had proposed (see data.scm)
+that, instead of have the verb
+be just 'eat, with a property  (get 'eat 'verb-type) -->  'regular
+
+We talk about the verb as an abstraction with a type and a root,
+and in the case of an irregular verb, contents that give specific
+forms for the verb conjugation.  Although we cover it over with
+abstraction: make-verb, type, root, contents  (see data.scm)  the verbs
+look like this, if we print them as normal lisp:
+
+'(regular . eat)   (that is, (cons 'regular  'eat))
+
+and for an irregular verb we have '(irreg . (be am are is))
+  {this actually prints as (irreg be am are is) }
+
+where 
+      (contents verb) is  (cdr verb) which is either (root) or (fp sp tp)
+
+      (root (contents verb)) --> eat, drink etc.  (i.e. cdr)
+
+      (type verb) is (car verb) --> regular, irregular, -es  (i.e. car)
+
+Now with this abstraction, we have a similar program, but the
+"type" program looks at the manifest type (car) rather than in a table.
+
+(define (tps verb) ;; third person singular
+  (let ((proc (get (type verb) 'tps)))  ;; this type = car gets manifest type
+
+   ;; either proc is ()  i.e. not found  or we can
+   ;; apply it to verb:
+
+    (if (not (null? proc)) (proc verb))
+	(error 'tps "I don't know about verb ~s~% " verb)))
+
+for a total of 6 programs that are all about the same.. e.g.
+
+(define (tpp verb) ;; third person singular
+  (let ((proc (get (type verb) 'tpp)))
+    (if (not (null? proc)) (proc verb))
+	(error 'tpp "I don't know about verb ~s~% " verb)))
+
+...........
+
+Now, another simplification... Since fps, sps, tps, fpp, spp, tpp
+are all almost the same program...
+
+Why not do this: 
+
+ (define (fps verb) (operate 'fps obj))
+ (define (sps verb) (operate 'sps obj))
+ (define (tps verb) (operate 'tps obj))
+etc...
+
+where operate is
+(define (operate op obj)  ;; op is one of fps, sps, tps, fpp, spp, tpp
+  (let ((proc (get (type obj) op)))
+    (if (not (null? proc))
+        (proc (contents obj))
+        (error op "Undefined operator" (list op obj)))))
+
+;;;;;;;;;;;;;;;;
+
+;; some detailed notes on data.scm -- how lisp represents them
+
+;; notes 
+
+;; note that (cons 'a 'b)  is  (a . b)   but
+;;           (cons 'a (cons 'b ())  is (a b)  ...
+
+box -->  (es . box)
+          ^     ^
+    type- |     |-root
+
+(get 'es 'fps) --> procedure   (actually, root)
+(get 'es 'tps) --> procedure   (actually (lambda(x)(add-es (root x))))
+
+(operate 'fps box) --> ((get (type box) 'fps) then apply it to "box" --> box
+(operate 'tps box) --> ((get (type box) 'fps) then apply it to "box" --> boxes
+
+(define be (make-irreg 'am 'are 'is))
+be --> (irreg am are is)
+          ^    ^  ^   \tps
+    type- |    |  \sps
+               |-fps
+
+
+
+
+
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/type.scm b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/type.scm
new file mode 100644
index 0000000..06fabeb
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/type.scm
@@ -0,0 +1,83 @@
+(define (make-regular root)
+  (attach-type 'regular root))
+
+(define (make-es root)
+  (attach-type 'es root))
+
+(define (make-irreg fp sp tp)
+  (attach-type 'irreg (list fp sp tp)))
+
+(define (attach-type type contents)
+  (cons type contents))
+
+(define (type thing)
+  (car thing))
+
+(define (contents thing)
+  (cdr thing))
+
+(define (fps verb)
+  (cond ((regular? verb) (root (contents verb)))
+	((es? verb) (root (contents verb)))
+	((irreg? verb) (fp (contents verb)))))
+
+(define (sps verb)
+  (cond ((regular? verb) (root (contents verb)))
+	((es? verb) (root (contents verb)))
+	((irreg? verb) (sp (contents verb)))))
+
+(define (tps verb)
+  (cond ((regular? verb) (add-s (root (contents verb))))
+	((es? verb) (add-es (root (contents verb))))
+	((irreg? verb) (tp (contents verb)))))
+
+(define (fpp verb)
+  (cond ((regular? verb) (root (contents verb)))
+	((es? verb) (root (contents verb)))
+	((irreg? verb) (sp (contents verb)))))
+
+(define (spp verb)
+  (cond ((regular? verb) (root (contents verb)))
+	((es? verb) (root (contents verb)))
+	((irreg? verb) (sp (contents verb)))))
+
+(define (tpp verb)
+  (cond ((regular? verb) (root (contents verb)))
+	((es? verb) (root (contents verb)))
+	((irreg? verb) (sp (contents verb)))))
+
+(define (regular? verb)
+  (eq? (type verb) 'regular))
+
+(define (es? verb)
+  (eq? (type verb) 'es))
+
+(define (irreg? verb)
+  (eq? (type verb) 'irreg))
+
+(define (root verb)
+  verb)
+
+(define (fp verb)
+  (car verb))
+
+(define (sp verb)
+  (cadr verb))
+
+(define (tp verb)
+  (caddr verb))
+
+(define (add-s wd)
+  (word wd 's))
+
+(define (add-es wd)
+  (word wd 'es))
+
+(define eat (make-regular 'eat))
+(define drink (make-regular 'drink))
+(define go (make-es 'go))
+(define box (make-es 'box))
+(define be (make-irreg 'am 'are 'is))
+
+
+