| 
									
										
										
										
											2008-04-27 23:12:52 -04:00
										 |  |  | ! Copyright (C) 2008 James Cash | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  | USING: lisp lisp.parser tools.test sequences math kernel parser arrays lists | 
					
						
							|  |  |  | quotations ;
 | 
					
						
							| 
									
										
										
										
											2008-04-27 23:12:52 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-29 23:10:47 -04:00
										 |  |  | IN: lisp.test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-22 18:38:51 -04:00
										 |  |  | [ | 
					
						
							|  |  |  |     init-env | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2008-06-05 18:14:43 -04:00
										 |  |  |     [ f ] "#f" lisp-define | 
					
						
							|  |  |  |     [ t ] "#t" lisp-define | 
					
						
							| 
									
										
										
										
											2008-05-22 18:38:51 -04:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2008-05-26 15:48:22 -04:00
										 |  |  |     "+" "math" "+" define-primitive | 
					
						
							|  |  |  |     "-" "math" "-" define-primitive | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  |     "cons" "lists" "cons" define-primitive | 
					
						
							|  |  |  |     "car" "lists" "car" define-primitive | 
					
						
							|  |  |  |     "cdr" "lists" "cdr" define-primitive | 
					
						
							|  |  |  |     "append" "lists" "lappend" define-primitive | 
					
						
							|  |  |  |     "nil" "lists" "nil" define-primitive | 
					
						
							|  |  |  |     "nil?" "lists" "nil?" define-primitive | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     [ seq>list ] "##list" lisp-define | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     "define" "lisp" "defun" define-primitive | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     "(lambda (&rest xs) xs)" lisp-string>factor "list" lisp-define | 
					
						
							|  |  |  |          | 
					
						
							| 
									
										
										
										
											2008-05-22 18:38:51 -04:00
										 |  |  |     { 5 } [ | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  |       ! [ 2 3 ] "+" <lisp-symbol> funcall | 
					
						
							|  |  |  |       "(+ 2 3)" lisp-eval | 
					
						
							| 
									
										
										
										
											2008-05-22 18:38:51 -04:00
										 |  |  |     ] unit-test | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     { 8.3 } [ | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  |      ! [ 10.4 2.1 ] "-" <lisp-symbol> funcall | 
					
						
							|  |  |  |      "(- 10.4 2.1)" lisp-eval | 
					
						
							| 
									
										
										
										
											2008-05-22 18:38:51 -04:00
										 |  |  |     ] unit-test | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     { 3 } [ | 
					
						
							| 
									
										
										
										
											2008-05-26 15:48:22 -04:00
										 |  |  |       "((lambda (x y) (+ x y)) 1 2)" lisp-eval | 
					
						
							| 
									
										
										
										
											2008-05-22 18:38:51 -04:00
										 |  |  |     ] unit-test | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2008-06-11 02:45:31 -04:00
										 |  |  | !     { 42 } [ | 
					
						
							|  |  |  | !       "((lambda (x y z) (+ x (- y z))) 40 3 1)" lisp-eval | 
					
						
							|  |  |  | !     ] unit-test | 
					
						
							| 
									
										
										
										
											2008-05-22 18:38:51 -04:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  |     { "b" } [ | 
					
						
							|  |  |  |       "(cond (#f \"a\") (#t \"b\"))" lisp-eval | 
					
						
							| 
									
										
										
										
											2008-06-08 09:01:31 -04:00
										 |  |  |     ] unit-test | 
					
						
							| 
									
										
										
										
											2008-06-07 22:32:54 -04:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  |     { 5 } [ | 
					
						
							|  |  |  |       "(begin (+ 1 4))" lisp-eval | 
					
						
							| 
									
										
										
										
											2008-06-05 16:28:24 -04:00
										 |  |  |     ] unit-test | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  |     { { 1 2 3 4 5 } } [ | 
					
						
							|  |  |  |         "(list 1 2 3 4 5)" lisp-eval list>seq | 
					
						
							| 
									
										
										
										
											2008-06-05 18:14:43 -04:00
										 |  |  |     ] unit-test | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  |     { { 1 2 { 3 { 4 } 5 } } } [ | 
					
						
							|  |  |  |         "(list 1 2 (list 3 (list 4) 5))" lisp-eval cons>seq | 
					
						
							| 
									
										
										
										
											2008-06-08 09:01:31 -04:00
										 |  |  |     ] unit-test | 
					
						
							| 
									
										
										
										
											2008-05-22 18:38:51 -04:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  |     { T{ lisp-symbol f "if" } } [ | 
					
						
							|  |  |  |         "(defmacro if (pred tr fl) (list (quote cond) (list (list pred tr) (list t fl))))" lisp-eval | 
					
						
							| 
									
										
										
										
											2008-05-22 18:38:51 -04:00
										 |  |  |     ] unit-test | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  |     { t } [ | 
					
						
							|  |  |  |         T{ lisp-symbol f "if" } lisp-macro? | 
					
						
							| 
									
										
										
										
											2008-05-22 18:38:51 -04:00
										 |  |  |     ] unit-test | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2008-06-11 01:25:11 -04:00
										 |  |  | !     { 1 } [ | 
					
						
							|  |  |  | !       "(if #t 1 2)" lisp-eval | 
					
						
							|  |  |  | !     ] unit-test | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | !     { 3 } [ | 
					
						
							|  |  |  | !        "((lambda (x) (if x (begin (+ 1 2)) (- 3 5))) #t)" lisp-eval | 
					
						
							|  |  |  | !     ] unit-test | 
					
						
							| 
									
										
										
										
											2008-05-26 15:48:22 -04:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2008-05-26 17:02:23 -04:00
										 |  |  | ] with-interactive-vocabs |