diff options
author | elioat <elioat@tilde.institute> | 2023-08-23 07:52:19 -0400 |
---|---|---|
committer | elioat <elioat@tilde.institute> | 2023-08-23 07:52:19 -0400 |
commit | 562a9a52d599d9a05f871404050968a5fd282640 (patch) | |
tree | 7d3305c1252c043bfe246ccc7deff0056aa6b5ab /js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4 | |
parent | 5d012c6c011a9dedf7d0a098e456206244eb5a0f (diff) | |
download | tour-562a9a52d599d9a05f871404050968a5fd282640.tar.gz |
*
Diffstat (limited to 'js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4')
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> </td><td align="right"> - </td><td> </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> </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> </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> </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> </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> </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> </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> </td><td align="right"> - </td><td> </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> </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> </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> </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> </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> </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> </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> </td><td align="right"> - </td><td> </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> </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> </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> </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> </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> </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> </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> </td><td align="right"> - </td><td> </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> </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> </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> </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> </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> </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> </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> </td><td align="right"> - </td><td> </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> </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> </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> </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> </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> </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> </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> </td><td align="right"> - </td><td> </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> </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> </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> </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> </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> </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> </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> </td><td align="right"> - </td><td> </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> </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> </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> </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> </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> </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> </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> </td><td align="right"> - </td><td> </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> </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> </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> </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> </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> </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> </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)) + + + |