perm filename SAMPLE.SES[206,LMM]1 blob sn#096401 filedate 1974-04-09 generic text, type C, neo UTF8

COMMENT ⊗ VALID 00002 PAGES C REC PAGE DESCRIPTION C00001 00001 C00002 00002 SAMPLE SESSION WITH PDP10 C00016 ENDMK C⊗; SAMPLE SESSION WITH PDP10 { This is a file giving a sample session with the LISP system. The file will look just like the teletype sheet, except for two things: my comments and thoughts will be surrounded by braces, and the symbol ⊂...⊃ will be used to stand for a lot of output that's irrelevant garbage. The problem I will do is to define a function called SUBSET which is a predicate taking two arguments, both of which are lists, to be interpreted as sets. SUBSET should return true if the first set is a subset of the second, otherwise it should return false. That is, SUBSET((A B) (B C A D F)) = T SUBSET((A B C) (C D A G E)) = NIL Here we go! } {hit ctrl-C} STANFORD-TENEX 1.28;1, HELLO EXEC: 3-26-74 @LOG nnLISP 206 {of course password is there in the middle, not echoed} JOB 23 ON TTY22 8-APR-74 23:23 ⊂...⊃ {now I'm logged in. } @TYPE <206LIB>NEWS.TXT {See if there is anything new} ⊂...⊃ ↑C {abort with ctrl-C} @ILISP.SAV;12 { this gets the UCI LISP system } %DEFINE(((SUBSET(LAMBDA(X Y)(COND((MEMBER (BAR X)Y)(SUBSET (CDR X) Y)) % (T NIL] (SUBSET) { This is a simple recursive (but wrong, as it turns out) definition of SUBSET. Let's try it } %SUBSET((A B) (A B C D)) BAR UNDEFINED FUNCTION (BAR BROKEN) 1:USE CAR FOR BAR {See UCI MANUAL, P. 1.10} 1:OK {continue the computation} NIL { That was the value of SUBSET. It should have been T. Lets print out the function we have now by calling the editor.} %EDITF(SUBSET) EDIT #PP (LAMBDA (X Y) (COND ((MEMBER (CAR X) Y) (SUBSET (CDR X) Y)) (T NIL))) { Note that the "USE" command to the break monitor above has changed the function definition automatically! I don't understand my error yet. Let's try some more test cases. } #OK {First exit the editor} SUBSET %SUBSET ((A)(A)) NIL {this should be T} %SUBSET ((A) (B)) NIL {well, this works! } %SUBSET ((A) NIL) NIL { This is the right answer } { let's try to figure out the trace facilities so we can figure out why we always get NIL.} %TRACE(SUBSET) {UCI MANUAL, P. 1.19} (SUBSET) %SUBSET((A B)(C B A] ENTER SUBSET: ! X = (A B) ! Y = (C B A) ! ENTER SUBSET: ! ! X = (B) ! ! Y = (C B A) ! ! ENTER SUBSET: ! ! ! X = NIL ! ! ! Y = (C B A) ! ! SUBSET = NIL ! SUBSET = NIL SUBSET = NIL NIL { I see the problem now. If X is NIL then SUBSET should return T. We can put another clause at the front of the COND clause } {Oops, it's five o'clock! I have to go now, so I'll save what I have and finish tomorrow} %SET(FNLIST (SUBSET] (SUBSET) %DSKOUT((SAVEIT . LMM) FNLIST] NIL { I should now have a file called saveit on my directory. } %↑C { Now get back to EXEC by hitting ctrl-C } @DIR { Let's see if my file is there by printing out my directory } <nnLISP> INIT.LSP;3 MESSAGE.TXT;1 SAVEIT.LMM;1 3 FILES, 3 PAGES @TY SAVEIT.LMM ; <nnLISP>SAVEIT.LMM;1 MON 8-APR-74 11:32PM PAGE 1 (DEFPROP FNLIST (FNLIST SUBSET) VALUE) (DEFPROP SUBSET (LAMBDA (X Y) (COND ((MEMBER (CAR X) Y) (SUBSET (CDR X) Y)) (T NIL))) EXPR) ↑L { That's my function! Now to logoff ... } @K [CONFIRM] KILLED JOB 23, USER nnLISP, ACCT 206, TTY 22, AT 4/08/74 2333 USED 0:0:8 IN 0:10:26 STANFORD-TENEX 1.28;1, HELLO EXEC: 3-26-74 @LOG 11LISP 206 ⊂...⊃ @ILISP.SAV;12 %SKI↑U## {abort line with ctrl-U} %DSKIN((SAVEIT.LMM)) { this gets my SUBSET back } FNLIST SUBSET FILES-LOADED { Now, let's fix up the definition } %EDITF(SUBSET) EDIT #P (LAMBDA (X Y) (COND & & )) #3 P (COND (& & ) (T NIL)) #(-2 ((NULL X) T$ #PP (COND ((NULL X) T) ((MEMBER (CAR X) Y) (SUBSET (CDR X) Y)) (T NIL)) #OK { This should work now } SUBSET %SUBSET((A B)(C B A] T { Hooray! } %SUBSET((C)(A B)) NIL { Hooray! } { That does it. I'll save my results and quit now} %DSKOUT((SAVEIT.LMM) FNLIST) { FNLIST still has its value } NIL %↑C @DIR *.LMM <nnLISP> SAVEIT.LMM;2,1 2 FILES, 2 PAGES @DEL SAVEIT.LMM;1 @DIR, @@DEL <nnLISP> SAVEIT.LMM;1 1 FILES, 1 PAGES {the only deleted file is mine; ignore MESSAGE.TXT if it is deleted} @EXP @K [CONFIRM] ⊂...⊃