JOY - compiled at 14:54:45 on Feb 1 2002 (BDW) Copyright 2001 by Manfred von Thun usrlib is loaded inilib is loaded agglib is loaded Testing the Lisp interpreter lisp in the library lsplib.joy agglib is already loaded numlib is loaded agglib is already loaded seqlib is loaded lsplib is loaded DEFINE l-prompt == "". lisp. Lisp interpreter To include the Lisp library, type [ include "OK" "lsplib.lsp" ] GO (* CONSTANTS *) 123.456 123.456 false false "hello world" "hello world" [ QUOTE [Peter Paul Mary] ] [Peter Paul Mary] [ QUOTE [1 2 3 4 5] ] [1 2 3 4 5] (* PRIMITIVE FUNCTIONS *) [ CAR [QUOTE [Peter Paul Mary]] ] Peter [ CDR [QUOTE [1 2 3 4 5]] ] [2 3 4 5] [ CONS Fred [QUOTE [Peter Paul]] ] [Fred Peter Paul] [ ATOM Fred ] true [ ATOM [QUOTE [1 2 3]] ] false [ NULL [QUOTE [1 2 3]] ] false [ NULL [QUOTE []] ] true [ EQ 2 3 ] false [ LIST [CDR [QUOTE [1 2 3]]] [ATOM 123] ] [[2 3] true] [ [LAMBDA [lis] CAR [CDR lis]] [QUOTE [11 22 33]] ] 22 (* "BORROWED" from JOY *) [ + [* 2 5] [- 10 7] ] 13 [ and true false ] false [ or true false ] true [ > 3 4 ] false [ and [NULL [QUOTE []]] [NULL [QUOTE [Bob]]] ] false [ map [QUOTE [10 11 12 13 14 15 16]] [QUOTE [prime]] ] [false true false true false false false] [ filter [QUOTE [10 11 12 13 14 15 16]] [QUOTE [prime]] ] [11 13] [ include "OK" "lsptst.lsp" ] (* "BORROWED" include *) "OK" (* FILE: lsptst.lsp *) (* Lisp tests, to be used with the Lisp interpreter in the library lsplib.joy *) (* DEFINITIONS *) [ DEF NIL [QUOTE []] ] NIL NIL [] [ ATOM NIL ] false [ NULL NIL ] true [ DEF PI 3.14 ] PI [ * PI 100.1 ] 314.314 [ DEF NAMELIST [QUOTE [Peter Paul Mary]] ] NAMELIST [ CDR NAMELIST ] [Paul Mary] [ DEF PAIR [ LAMBDA [x y] CONS x [CONS y NIL]] ] PAIR [ PAIR 11 22] [11 22] [ DEF SECOND [ LAMBDA [lis] [CAR [CDR lis]] ] ] SECOND [ SECOND [QUOTE [11 22 33 44]] ] 22 [ DEF PRIME [ LAMBDA [n] prime n ] ] PRIME [ PRIME 13 ] true [ PRIME 14 ] false (* LIBRARY COMBINATORS *) (* FOLDR FOLDL *) [ FOLDR [QUOTE [a b c]] [QUOTE [d e]] [LAMBDA [x y] CONS x y] ] [a b c d e] [ FOLDL [QUOTE [a b c]] [QUOTE [d e]] [LAMBDA [x y] CONS x y] ] [c b a d e] (* DEFS USING FOLDR *) [ DEFUN CONCAT [lis1 lis2] FOLDR lis1 lis2 [LAMBDA [l r] CONS l r] ] CONCAT [ CONCAT [QUOTE [1 2]] [QUOTE [3 4 5]] ] [1 2 3 4 5] [ DEFUN FLATTEN [lis] FOLDR lis NIL CONCAT ] FLATTEN [ FLATTEN [ QUOTE [[1 2] [] [3]] ] ] [1 2 3] [ DEFUN MEMBER [el lis] FOLDR lis false [LAMBDA [x y] IF [EQ el x] true y] ] MEMBER [ MEMBER Bob [QUOTE [Peter Paul Mary]] ] false [ MEMBER Bob [QUOTE [Peter Bob Mary]] ] true [ DEFUN SUM [lis] FOLDR lis 0 [LAMBDA [x y] [+ x y]] ] SUM [ SUM [QUOTE [1 2 3 4]] ] 10 [ DEFUN LIST-TO-FLOAT [lis] FOLDR lis 0.0 [LAMBDA [x y] + x [/ y 10.0]] ] LIST-TO-FLOAT [ LIST-TO-FLOAT [QUOTE [3 1 4 1 5]] ] 3.1415 [ DEFUN MAP [lis fun] FOLDR lis NIL [LAMBDA [l r] CONS [fun l] r] ] MAP [ MAP [QUOTE [1 2 3 4]] [LAMBDA [n] * n n] ] [1 4 9 16] [ MAP [QUOTE [[John Smith] [Mary Robinson]]] [LAMBDA [l] CAR l] ] [John Mary] [ MAP [QUOTE [10 11 12 13 14 15 16]] PRIME ] [false true false true false false false] [ DEFUN FILTER [lis pred] FOLDR lis NIL [LAMBDA [l r] IF [pred l] [CONS l r] r] ] FILTER [ FILTER [QUOTE [1 3 1 4 2]] [LAMBDA [n] < n 3] ] [1 1 2] [ FILTER [QUOTE [1 [2 3] 4 [] [5] 6]] [LAMBDA [x] ATOM x] ] [1 4 6] [ FILTER [QUOTE [10 11 12 13 14 15 16]] PRIME ] [11 13] (* DEFS USING FOLDL *) [ DEFUN SHUNT [l1 l2] FOLDL l1 l2 [LAMBDA [l r] CONS l r] ] SHUNT [ SHUNT [QUOTE [1 2 3]] [QUOTE [4 5 6 7]] ] [3 2 1 4 5 6 7] [ DEFUN REVERSE [lis] SHUNT lis NIL ] REVERSE [ REVERSE [QUOTE [Smith Jones Robinson]] ] [Robinson Jones Smith] [ DEFUN LIST-TO-INT [lis] FOLDL lis 0 [LAMBDA [x y] + x [* 10 y]] ] LIST-TO-INT [ LIST-TO-INT [QUOTE [3 1 4 1 5]] ] 31415 (* DEFS USING FOLDR2 *) [ DEFUN ZIP [l1 l2] FOLDR2 l1 l2 NIL [LAMBDA [x y z] CONS [PAIR x y] z] ] ZIP [ ZIP NAMELIST [QUOTE [Smith Jones Robinson]] ] [[Peter Smith] [Paul Jones] [Mary Robinson]] [ DEFUN WEAVE [l1 l2] FOLDR2 l1 l2 NIL [LAMBDA [x y z] CONS x [CONS y z]] ] WEAVE [ WEAVE NAMELIST [QUOTE [Smith Jones Robinson]] ] [Peter Smith Paul Jones Mary Robinson] [ DEFUN SUM-OF-PRODUCTS [l1 l2] FOLDR2 l1 l2 0 [LAMBDA [x y z] + [* x y] z] ] SUM-OF-PRODUCTS [ SUM-OF-PRODUCTS [QUOTE [1 2 3]] [QUOTE [1 10 100]] ] 321 [ DEFUN MAP2 [l1 l2 f] FOLDR2 l1 l2 NIL [LAMBDA [x y z] CONS [f x y] z] ] MAP2 [ MAP2 [QUOTE [1 2 3]] [QUOTE [1 10 100]] [LAMBDA [x y] * x y] ] [1 20 300] (* DEFS USING RECFOLDR *) [ DEFUN RECFLATTEN [lis] RECFOLDR lis NIL [LAMBDA [x l] CONS x l] ] RECFLATTEN [ RECFLATTEN [QUOTE [1 [] [[2 3] [] 4 [5]] [[[[6]]]] ]] ] [1 2 3 4 5 6] [ DEFUN RECSUM [lis] RECFOLDR lis 0 [LAMBDA [x y] + x y] ] RECSUM [ RECSUM [QUOTE [1 [] [[2 3] [] 4 [5]] [[[[6]]]] ]] ] 21 (* simulating recursion by Self-Application *) [ DEFUN FACT0 [f n] IF [NULL n] 1 [* n [f f [pred n]]] ] FACT0 [ DEFUN FACT [n] FACT0 FACT0 n ] FACT [ FACT 5 ] 120 [ DEFUN LAST0 [f lis] IF [NULL [CDR lis]] [CAR lis] [f f [CDR lis]] ] LAST0 [ DEFUN LAST [lis] LAST0 LAST0 lis ] LAST [ LAST [QUOTE [11 22 33 44 55]] ] 55 (* END: lsptst.lsp *) � (* back to lsptst.joy *) EXIT (* from Lisp *) exit from Lisp interpreter (* END: lsptst.joy *)