form & function in software - dreamsongs
TRANSCRIPT
![Page 1: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/1.jpg)
Form & Functionin Software
Richard P. Gabriel phd mfa
![Page 2: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/2.jpg)
<1>
![Page 3: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/3.jpg)
Confusionists and superficial intellectuals...
![Page 4: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/4.jpg)
...move ahead...
![Page 5: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/5.jpg)
...while the ‘deep thinkers’ descend into the darker regions of the
status quo...
![Page 6: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/6.jpg)
...or, to express it in a different way, they remain stuck in the mud.
–Paul Feyerabend
![Page 7: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/7.jpg)
<2>
![Page 8: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/8.jpg)
(defun factorial (n) (cond ((= n 0) 1) (t (* n (factorial (- n 1))))))
![Page 9: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/9.jpg)
(defun eval (form env) (cond ((null form) nil) ((numberp form) form) ((stringp form) form) ((eq t form) form) ((atom form) (cond ((get form 'APVAL)) (t (lookup form env)))) ((eq (car form) 'quote) (car (cdr form))) ((eq (car form) 'cond) (evalcond (cdr form) env)) (t (apply (car form) (evallist (cdr form) env) env))))
(defun apply (fct parms env) (cond ((atom fct) (cond ((eq fct 'car) (car (car parms))) ((eq fct 'cdr) (cdr (car parms))) ((eq fct 'cons) (cons (car parms) (car (cdr parms)))) ((eq fct 'get) (get (car parms) (car (cdr parms)))) ((eq fct 'atom) (atom (car parms))) ((eq fct 'error) (error (string parms))) ((eq fct 'eq) (eq (car parms) (car (cdr parms)))) (t (cond ((get fct 'EXPR) (apply (get fct 'EXPR) parms env) parms env) (t (apply (lookup fct env) parms env)))))) ((eq (car fct) 'lambda) (eval (car (cdr (cdr fct))) (update (car (cdr fct)) parms env))) (t (apply (eval fct env) parms env))))
(defun evalcond (conds env) (cond ((null conds) nil) ((eval (car (car conds)) env) (eval (car (cdr (car conds))) env)) (t (evalcond (cdr conds) env))))
![Page 10: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/10.jpg)
(defun eval (form env)(cond ((null form) nil) ((numberp form) form) ((stringp form) form) ((eq t form) form) ((atom form) (cond ((get form 'APVAL)) (t (lookup form env)))) ((eq (car form) 'quote) (car (cdr form))) ((eq (car form) 'cond) (evalcond (cdr form) env)) (t (apply (car form) (evallist (cdr form) env) env))))(defun apply (fct parms env) (cond ((atom fct) (cond ((eq fct 'car) (car (car parms))) ((eq fct 'cdr) (cdr (car parms))) ((eq fct 'cons) (cons (car parms) (car (cdr parms)))) ((eq fct 'get) (get (car parms) (car (cdr parms)))) ((eq fct 'atom) (atom (car parms))) ((eq fct 'error) (error (string parms))) ((eq fct 'eq) (eq (car parms) (car (cdr parms)))) (t (cond ((get fct 'EXPR) (apply (get fct 'EXPR) parms env) parms env) (t (apply (lookup fct env) parms env)))))) ((eq (car fct) 'lambda) (eval (car (cdr (cdr fct))) (update (car (cdr fct)) parms env))) (t (apply (eval fct env) parms env))))(defun evalcond (conds env) (cond ((null conds) nil) ((eval (car (car conds)) env) (eval (car (cdr (car conds))) env)) (t (evalcond (cdr conds) env))))
![Page 11: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/11.jpg)
form and function can be as disjoint as you care to have it
![Page 12: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/12.jpg)
(factorial 10) -> 3628800
![Page 13: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/13.jpg)
(defun eval (form env) (cond ((eq form 't) t) ((eq form 1) (format t "!~%") nil) ((atom form) (lookup form env)) ((eq (car form) '*) (format t " Screw you!") (eval (caddr form) env)) ((eq (car form) '=) (= 0 (lookup (caddr form) env))) ((eq (car form) '-) (- (lookup (cadr form) env) 1)) ((eq (car form) 'cond) (evcond (cdr form) env)) (t (apply (car form) (evlist (cdr form) env) env))))
(defun apply (fn args env) (let ((fndef (lookup fn env))) (eval (cadr fndef) (update (car fndef) args env))))
(defun evcond (forms env) (cond ((null forms) nil) ((eval (car (car forms)) env) (eval (cadr (car forms)) env)) (t (evcond (cdr forms) env))))
(defun update (l1 l2 env) (cond ((null l1) env) (t (update (cdr l1) (cdr l2) (push (list (car l1) (car l2)) env)))))
(defun lookup (var env) (cadr (assoc var env)))
(defun evlist (l env) (mapcar #'(lambda (x) (eval x env)) l))
![Page 14: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/14.jpg)
(factorial 10) ->
Screw you! Screw you! Screw you! Screw you! Screw you! Screw you! Screw you! Screw you! Screw you! Screw you!!NIL
![Page 15: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/15.jpg)
the same form can have many functions...
![Page 16: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/16.jpg)
...& the same function can be expressed in many forms
![Page 17: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/17.jpg)
form1 form2
form3 form4Function
![Page 18: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/18.jpg)
but, an interpreter is another form...
![Page 19: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/19.jpg)
Form Function
Form Function
Interpreter1
![Page 20: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/20.jpg)
Form Function
Form Function
Form Function
Interpreter1
Interpreter2
![Page 21: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/21.jpg)
Form Function
Form Function
Form Function
Interpreter1
Interpreter2
Form Function
Interpreter3
![Page 22: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/22.jpg)
Form Function
Form Function
Interpreter1
![Page 23: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/23.jpg)
almost any number of interpreters can produce the same result
![Page 24: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/24.jpg)
∀form, ∀ function, ∃ interpreter stform -[interpreter]-> function
![Page 25: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/25.jpg)
in the real world...
![Page 26: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/26.jpg)
form <-[laws of physics?]-> function
![Page 27: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/27.jpg)
a door must be large enough...
![Page 28: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/28.jpg)
...for what passes through...
![Page 29: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/29.jpg)
...& a table must be flat...
![Page 30: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/30.jpg)
...so what it supports does not slip
![Page 31: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/31.jpg)
such laws are the essential interpreter...
![Page 32: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/32.jpg)
...everything else is contingent
![Page 33: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/33.jpg)
and perhaps in the real world...
![Page 34: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/34.jpg)
form <-[design]- function
[design]
|^ constrained
constrained
![Page 35: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/35.jpg)
form <-[design]- function
[design]
|^| ^ constrained
constrained
![Page 36: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/36.jpg)
in the software world...
![Page 37: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/37.jpg)
function^|
design
![Page 38: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/38.jpg)
function^|
design
form^|
design
![Page 39: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/39.jpg)
function^|
design
form^|
design
![Page 40: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/40.jpg)
function^|
design
form^|
design
![Page 41: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/41.jpg)
are all software interpreters contingent?
![Page 42: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/42.jpg)
Physical Constraints on Computing
P=NP?
size and speed of memory
speed of processors
speed of communications
density of computational resources
![Page 43: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/43.jpg)
limited resourcesunlimited imagination
![Page 44: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/44.jpg)
...but it’s rarely this desperate...
![Page 45: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/45.jpg)
<3>
![Page 46: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/46.jpg)
Other Forms of Form
Model Purpose Languagesprocedural control Pascal, Algolfunctional composition Lisp, Haskelllogic constraints Prologobject-oriented simulation Smalltalk, Javahardware OS C, C++string transformation Perlarray collections APLconcurrency events threading?...
![Page 47: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/47.jpg)
invent an intellectual structure...
![Page 48: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/48.jpg)
...describing a programming model...
![Page 49: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/49.jpg)
...that makes it easier to program things that we think of that way
![Page 50: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/50.jpg)
OO: objects sending messages to each other
![Page 51: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/51.jpg)
![Page 52: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/52.jpg)
![Page 53: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/53.jpg)
![Page 54: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/54.jpg)
![Page 55: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/55.jpg)
![Page 56: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/56.jpg)
![Page 57: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/57.jpg)
<4>
![Page 58: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/58.jpg)
other forms of form
![Page 59: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/59.jpg)
Johnniac
![Page 60: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/60.jpg)
G5
![Page 61: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/61.jpg)
Sony Personal Entertainment Communicator
![Page 62: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/62.jpg)
QRIO
![Page 63: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/63.jpg)
~50 computers
![Page 64: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/64.jpg)
Boeing 777 Flight Deck
![Page 65: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/65.jpg)
<5>
![Page 66: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/66.jpg)
many excellent programs...
![Page 67: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/67.jpg)
...exhibit common local characteristics...
![Page 68: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/68.jpg)
...not the same, but similar...
![Page 69: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/69.jpg)
...and they represent sketches of form...
![Page 70: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/70.jpg)
...giving rise to
excellent function,sturdy structure,
and palpable beauty
![Page 71: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/71.jpg)
they are called “patterns,”...
![Page 72: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/72.jpg)
...and they are our best hope for a lasting connection between
form and function in software
![Page 73: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/73.jpg)
<6>
![Page 74: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/74.jpg)
form creates function for theessential interpreter
![Page 75: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/75.jpg)
form creates aesthetics for thecontingent interpreter
![Page 76: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/76.jpg)
software is the discipline whereform and function
are least entangled
![Page 77: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/77.jpg)
last thought:
![Page 78: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/78.jpg)
(factorial 10)
![Page 79: Form & Function in Software - Dreamsongs](https://reader036.vdocuments.us/reader036/viewer/2022071602/613d6199736caf36b75ca83d/html5/thumbnails/79.jpg)
!