Re-organize the lisp files
This commit is contained in:
		
							parent
							
								
									416627896e
								
							
						
					
					
						commit
						e1c544f0ea
					
				| @ -4,5 +4,5 @@ Test | |||||||
| Unit tests for the dlambda special function. | Unit tests for the dlambda special function. | ||||||
| 
 | 
 | ||||||
| | script | lisp interpreter fixture                   | | | script | lisp interpreter fixture                   | | ||||||
| | check  | evaluate | (load "lisp/dlambda-test.lisp") | T      | | | check  | evaluate | (load "lisp/lang/dlambda-test.lisp") | T      | | ||||||
| | check  | evaluate | (test-dlambda)                       | =~/T$/ | | | check  | evaluate | (test-dlambda)                       | =~/T$/ | | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ Test | |||||||
| Shows object composition, a default method, and two different ways of referencing objects. | Shows object composition, a default method, and two different ways of referencing objects. | ||||||
| 
 | 
 | ||||||
| | script           | lisp interpreter fixture                 | | | script           | lisp interpreter fixture                 | | ||||||
| | check | evaluate | (load "lisp/fruit-counter.lisp")  | T    | | | check | evaluate | (load "lisp/object/fruit-counter.lisp")  | T    | | ||||||
| | check | evaluate | (my-fruits :inc-apples)                  | 1    | | | check | evaluate | (my-fruits :inc-apples)                  | 1    | | ||||||
| | check | evaluate | (my-fruits :inc-apples)                  | 2    | | | check | evaluate | (my-fruits :inc-apples)                  | 2    | | ||||||
| | check | evaluate | (funcall my-fruits2 :dec-bananas)        | 9999 | | | check | evaluate | (funcall my-fruits2 :dec-bananas)        | 9999 | | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| |LispInterpreter.ExternalFunctionUnitTests||14:30:55 Fri, Mar 03, 2017| | |LispInterpreter.ObjectComposition||10:34:19 Mon, Mar 06, 2017| | ||||||
|  | |LispInterpreter.ExternalFunctionUnitTests||10:30:46 Mon, Mar 06, 2017| | ||||||
| |LispInterpreter.MultipleMethodObject||14:19:50 Fri, Mar 03, 2017| | |LispInterpreter.MultipleMethodObject||14:19:50 Fri, Mar 03, 2017| | ||||||
| |LispInterpreter.LexicalClosures||14:18:39 Fri, Mar 03, 2017| | |LispInterpreter.LexicalClosures||14:18:39 Fri, Mar 03, 2017| | ||||||
| |LispInterpreter.ObjectComposition||14:17:58 Fri, Mar 03, 2017| |  | ||||||
| |LispInterpreter.DlambdaUnitTests||10:16:42 Fri, Mar 03, 2017| | |LispInterpreter.DlambdaUnitTests||10:16:42 Fri, Mar 03, 2017| | ||||||
| |LispInterpreter.dlambda||10:12:59 Fri, Mar 03, 2017| | |LispInterpreter.dlambda||10:12:59 Fri, Mar 03, 2017| | ||||||
| |LispInterpreter||09:04:51 Fri, Mar 03, 2017| | |LispInterpreter||09:04:51 Fri, Mar 03, 2017| | ||||||
|  | |||||||
| @ -1,52 +0,0 @@ | |||||||
| (load "unit-test.lisp") |  | ||||||
| (load "compound-interest.lisp") |  | ||||||
| 
 |  | ||||||
| (unit |  | ||||||
|   (list |  | ||||||
| 
 |  | ||||||
|     (defun many-years-with-no-interest-rate () |  | ||||||
|       (assert= 100000 (compound-interest 100000 0 10)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     (defun no-years-with-positive-interest-rate () |  | ||||||
|       (assert= 100000 (compound-interest 100000 10 0)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     (defun one-year-with-positive-interest-rate () |  | ||||||
|       (assert= 105000 (compound-interest 100000 5 1)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     (defun two-years-with-positive-interest-rate () |  | ||||||
|       (assert= 110250 (compound-interest 100000 5 2)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     (defun three-years-with-positive-interest-rate () |  | ||||||
|       (assert= 115763 (compound-interest 100000 5 3)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     (defun four-years-with-positive-interest-rate () |  | ||||||
|       (assert= 121551 (compound-interest 100000 5 4)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     (defun one-year-with-negative-interest-rate () |  | ||||||
|       (assert= 95000 (compound-interest 100000 -5 1)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     (defun two-years-with-negative-interest-rate () |  | ||||||
|       (assert= 90250 (compound-interest 100000 -5 2)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     (defun three-years-with-negative-interest-rate () |  | ||||||
|       (assert= 85737 (compound-interest 100000 -5 3)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     (defun four-years-with-negative-interest-rate () |  | ||||||
|       (assert= 81450 (compound-interest 100000 -5 4)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     (defun negative-number-of-years () |  | ||||||
|       (assert= 100000 (compound-interest 100000 5 -4)) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| @ -1,50 +0,0 @@ | |||||||
| (defun extend-null (the-list) |  | ||||||
|   (cond |  | ||||||
|    ((equal (length the-list) 0) t) |  | ||||||
|    (t nil) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| (defun mapcar (function-name the-list) |  | ||||||
|   (cond |  | ||||||
|    ((null the-list) nil) |  | ||||||
|    (t (cons (funcall function-name (first the-list)) |  | ||||||
| 	    (mapcar function-name (rest the-list)))) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| (defun maplist (function-name the-list) |  | ||||||
|   (cond |  | ||||||
|    ((null the-list) nil) |  | ||||||
|    (t (cons (funcall function-name the-list) |  | ||||||
| 	    (maplist function-name (rest the-list)))) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| (defun extend-apply (function-name param-list) |  | ||||||
|   (eval (cons function-name param-list))) |  | ||||||
| 
 |  | ||||||
| (defun append (listA listB) |  | ||||||
|   (cond |  | ||||||
|    ((null listA) listB) |  | ||||||
|    (t (cons (first listA) (append (rest listA) listB))) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| (defun second (listA) (first (rest listA))) |  | ||||||
| (defun third (listA) (first (rest (rest listA)))) |  | ||||||
| (defun fourth (listA) (first (rest (rest (rest listA))))) |  | ||||||
| (defun fifth (listA) (first (rest (rest (rest (rest listA)))))) |  | ||||||
| (defun sixth (listA) (first (rest (rest (rest (rest (rest listA))))))) |  | ||||||
| (defun seventh (listA) (first (rest (rest (rest (rest (rest (rest listA)))))))) |  | ||||||
| (defun eighth (listA) (first (rest (rest (rest (rest (rest (rest (rest listA))))))))) |  | ||||||
| (defun ninth (listA) (first (rest (rest (rest (rest (rest (rest (rest (rest listA)))))))))) |  | ||||||
| (defun tenth (listA) (first (rest (rest (rest (rest (rest (rest (rest (rest (rest listA))))))))))) |  | ||||||
| 
 |  | ||||||
| (defun nth (n listA) |  | ||||||
|   (cond |  | ||||||
|    ((equal 0 n) (first listA)) |  | ||||||
|    (t (nth (- n 1) (rest listA))) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
							
								
								
									
										38
									
								
								lisp/finance/compound-interest-test.lisp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								lisp/finance/compound-interest-test.lisp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | (load "../unit/unit-test.lisp") | ||||||
|  | (load "compound-interest.lisp") | ||||||
|  | 
 | ||||||
|  | (unit | ||||||
|  |   (list | ||||||
|  | 
 | ||||||
|  |     (defun many-years-with-no-interest-rate () | ||||||
|  |       (assert= 100000 (compound-interest 100000 0 10))) | ||||||
|  | 
 | ||||||
|  |     (defun no-years-with-positive-interest-rate () | ||||||
|  |       (assert= 100000 (compound-interest 100000 10 0))) | ||||||
|  | 
 | ||||||
|  |     (defun one-year-with-positive-interest-rate () | ||||||
|  |       (assert= 105000 (compound-interest 100000 5 1))) | ||||||
|  | 
 | ||||||
|  |     (defun two-years-with-positive-interest-rate () | ||||||
|  |       (assert= 110250 (compound-interest 100000 5 2))) | ||||||
|  | 
 | ||||||
|  |     (defun three-years-with-positive-interest-rate () | ||||||
|  |       (assert= 115763 (compound-interest 100000 5 3))) | ||||||
|  | 
 | ||||||
|  |     (defun four-years-with-positive-interest-rate () | ||||||
|  |       (assert= 121551 (compound-interest 100000 5 4))) | ||||||
|  | 
 | ||||||
|  |     (defun one-year-with-negative-interest-rate () | ||||||
|  |       (assert= 95000 (compound-interest 100000 -5 1))) | ||||||
|  | 
 | ||||||
|  |     (defun two-years-with-negative-interest-rate () | ||||||
|  |       (assert= 90250 (compound-interest 100000 -5 2))) | ||||||
|  | 
 | ||||||
|  |     (defun three-years-with-negative-interest-rate () | ||||||
|  |       (assert= 85737 (compound-interest 100000 -5 3))) | ||||||
|  | 
 | ||||||
|  |     (defun four-years-with-negative-interest-rate () | ||||||
|  |       (assert= 81450 (compound-interest 100000 -5 4))) | ||||||
|  | 
 | ||||||
|  |     (defun negative-number-of-years () | ||||||
|  |       (assert= 100000 (compound-interest 100000 5 -4))))) | ||||||
| @ -1,19 +1,14 @@ | |||||||
| (defun decrement (n) (- n 1)) | (defun decrement (n) (- n 1)) | ||||||
| 
 | 
 | ||||||
| (defun percent (n percentage) | (defun percent-of-number (n percentage) | ||||||
|   (if (> percentage 0) |   (if (> percentage 0) | ||||||
|     (/ (+ (* n percentage) 50) 100) |     (/ (+ (* n percentage) 50) 100) | ||||||
|     (/ (- (* n percentage) 50) 100) |     (/ (- (* n percentage) 50) 100))) | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (defun compound-interest (principal interest-rate years) | (defun compound-interest (principal interest-rate years) | ||||||
|   (if (< years 1) |   (if (< years 1) | ||||||
|     principal |     principal | ||||||
|     (compound-interest |     (compound-interest | ||||||
|       (+ principal (percent principal interest-rate)) |       (+ principal (percent-of-number principal interest-rate)) | ||||||
|       interest-rate |       interest-rate | ||||||
|       (decrement years) |       (decrement years)))) | ||||||
|     ) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| @ -8,14 +8,7 @@ | |||||||
|       (- |       (- | ||||||
|         (+ |         (+ | ||||||
|           days-in-year |           days-in-year | ||||||
|           leap-year |           leap-year) | ||||||
|         ) |         first-payday-day) | ||||||
|         first-payday-day |       two-weeks) | ||||||
|       ) |     1)) | ||||||
|       two-weeks |  | ||||||
|     ) |  | ||||||
|     1 |  | ||||||
|   ) |  | ||||||
| 
 |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| @ -1,4 +1,4 @@ | |||||||
| (load "unit-test.lisp") | (load "../unit/unit-test.lisp") | ||||||
| (load "dlambda.lisp") | (load "dlambda.lisp") | ||||||
| 
 | 
 | ||||||
| (defun test-dlambda () | (defun test-dlambda () | ||||||
| @ -9,65 +9,48 @@ | |||||||
|       (defun empty-dlambda () |       (defun empty-dlambda () | ||||||
|         (assert-equal |         (assert-equal | ||||||
|          '(lambda (&rest arguments) (case (first arguments))) |          '(lambda (&rest arguments) (case (first arguments))) | ||||||
|           (dlambda) | 
 | ||||||
|         ) |           (dlambda))) | ||||||
|       ) |  | ||||||
| 
 | 
 | ||||||
|       (defun dlambda-default-method-only () |       (defun dlambda-default-method-only () | ||||||
|         (assert-equal |         (assert-equal | ||||||
|          '(lambda (&rest arguments) |          '(lambda (&rest arguments) | ||||||
|             (case (first arguments) |             (case (first arguments) | ||||||
|               (t (apply (lambda () (print "nothing")) arguments)) |               (t (apply (lambda () (print "nothing")) arguments)))) | ||||||
|             ) | 
 | ||||||
|           ) |  | ||||||
|           (dlambda |           (dlambda | ||||||
|             (t () (print "nothing")) |             (t () (print "nothing"))))) | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
|       ) |  | ||||||
| 
 | 
 | ||||||
|       (defun dlambda-named-method-only () |       (defun dlambda-named-method-only () | ||||||
|         (assert-equal |         (assert-equal | ||||||
|          '(lambda (&rest arguments) |          '(lambda (&rest arguments) | ||||||
|             (case (first arguments) |             (case (first arguments) | ||||||
|               (:write (apply (lambda () (print "something")) (rest arguments))) |               (:write (apply (lambda () (print "something")) (rest arguments))))) | ||||||
|             ) | 
 | ||||||
|           ) |  | ||||||
|           (dlambda |           (dlambda | ||||||
|             (:write () (print "something")) |             (:write () (print "something"))))) | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
|       ) |  | ||||||
| 
 | 
 | ||||||
|       (defun dlambda-named-and-default-method () |       (defun dlambda-named-and-default-method () | ||||||
|         (assert-equal |         (assert-equal | ||||||
|          '(lambda (&rest arguments) |          '(lambda (&rest arguments) | ||||||
|             (case (first arguments) |             (case (first arguments) | ||||||
|               (:write (apply (lambda () (print "something")) (rest arguments))) |               (:write (apply (lambda () (print "something")) (rest arguments))) | ||||||
|               (t (apply (lambda () (print "nothing")) arguments)) |               (t (apply (lambda () (print "nothing")) arguments)))) | ||||||
|             ) | 
 | ||||||
|           ) |  | ||||||
|           (dlambda |           (dlambda | ||||||
|             (:write () (print "something")) |             (:write () (print "something")) | ||||||
|             (t () (print "nothing")) |             (t () (print "nothing"))))) | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
|       ) |  | ||||||
| 
 | 
 | ||||||
|       (defun dlambda-methods-with-arguments () |       (defun dlambda-methods-with-arguments () | ||||||
|         (assert-equal |         (assert-equal | ||||||
|          '(lambda (&rest arguments) |          '(lambda (&rest arguments) | ||||||
|             (case (first arguments) |             (case (first arguments) | ||||||
|               (:write (apply (lambda (message) (print message)) (rest arguments))) |               (:write (apply (lambda (message) (print message)) (rest arguments))) | ||||||
|               (t (apply (lambda (&rest messages) (print messages)) arguments)) |               (t (apply (lambda (&rest messages) (print messages)) arguments)))) | ||||||
|             ) | 
 | ||||||
|           ) |  | ||||||
|           (dlambda |           (dlambda | ||||||
|             (:write (message) (print message)) |             (:write (message) (print message)) | ||||||
|             (t (&rest messages) (print messages)) |             (t (&rest messages) (print messages))))) | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
|       ) |  | ||||||
| 
 | 
 | ||||||
|       (defun dlambda-methods-with-multiple-arguments () |       (defun dlambda-methods-with-multiple-arguments () | ||||||
|         (assert-equal |         (assert-equal | ||||||
| @ -77,39 +60,21 @@ | |||||||
|                 (apply |                 (apply | ||||||
|                   (lambda (message &rest other-stuff) |                   (lambda (message &rest other-stuff) | ||||||
|                     (print message) |                     (print message) | ||||||
|                     (print other-stuff) |                     (print other-stuff)) | ||||||
|                   ) |                   (rest arguments))) | ||||||
|                   (rest arguments) |  | ||||||
|                 ) |  | ||||||
|               ) |  | ||||||
|               (t |               (t | ||||||
|                 (apply |                 (apply | ||||||
|                   (lambda (message1 message2 &rest other-stuff) |                   (lambda (message1 message2 &rest other-stuff) | ||||||
|                     (print message1) |                     (print message1) | ||||||
|                     (print message2) |                     (print message2) | ||||||
|                     (print other-stuff) |                     (print other-stuff)) | ||||||
|                   ) |                   arguments)))) | ||||||
|                   arguments | 
 | ||||||
|                 ) |  | ||||||
|               ) |  | ||||||
|             ) |  | ||||||
|           ) |  | ||||||
|           (dlambda |           (dlambda | ||||||
|             (:write (message &rest other-stuff) |             (:write (message &rest other-stuff) | ||||||
|               (print message) |               (print message) | ||||||
|               (print other-stuff) |               (print other-stuff)) | ||||||
|             ) |  | ||||||
|             (t (message1 message2 &rest other-stuff) |             (t (message1 message2 &rest other-stuff) | ||||||
|               (print message1) |               (print message1) | ||||||
|               (print message2) |               (print message2) | ||||||
|               (print other-stuff) |               (print other-stuff)))))))) | ||||||
|             ) |  | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
|       ) |  | ||||||
| 
 |  | ||||||
|     ) |  | ||||||
|   ) |  | ||||||
| 
 |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| @ -1,12 +1,4 @@ | |||||||
| (defun mapcar (fn ls) | (load "functions.lisp") | ||||||
|   (if (null ls) |  | ||||||
|     () |  | ||||||
|     (cons |  | ||||||
|       (funcall fn (first ls)) |  | ||||||
|       (mapcar fn (rest ls)) |  | ||||||
|     ) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (define-macro dlambda (&rest methods) | (define-macro dlambda (&rest methods) | ||||||
|   (cons |   (cons | ||||||
| @ -28,25 +20,9 @@ | |||||||
|                       (cons |                       (cons | ||||||
|                         (cons |                         (cons | ||||||
|                           (quote lambda) |                           (quote lambda) | ||||||
|                           (rest method) |                           (rest method)) | ||||||
|                         ) |  | ||||||
|                         (list |                         (list | ||||||
|                           (if (equal t (car method)) |                           (if (equal t (car method)) | ||||||
|                             (quote arguments) |                             (quote arguments) | ||||||
|                             (quote (rest arguments)) |                             (quote (rest arguments))))))))) | ||||||
|                           ) |               methods))))))) | ||||||
|                         ) |  | ||||||
|                       ) |  | ||||||
|                     ) |  | ||||||
|                   ) |  | ||||||
|                 ) |  | ||||||
|               ) |  | ||||||
|               methods |  | ||||||
|             ) |  | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
|       ) |  | ||||||
|     ) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
							
								
								
									
										29
									
								
								lisp/lang/functions.lisp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								lisp/lang/functions.lisp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | (defun extend-null (the-list) | ||||||
|  |   (cond | ||||||
|  |    ((equal (length the-list) 0) t) | ||||||
|  |    (t nil))) | ||||||
|  | 
 | ||||||
|  | (defun mapcar (function-name the-list) | ||||||
|  |   (if the-list | ||||||
|  |     (cons | ||||||
|  |       (funcall function-name (first the-list)) | ||||||
|  |       (mapcar function-name (rest the-list))))) | ||||||
|  | 
 | ||||||
|  | (defun maplist (function-name the-list) | ||||||
|  |   (cond | ||||||
|  |    ((null the-list) nil) | ||||||
|  |    (t (cons (funcall function-name the-list) | ||||||
|  |        (maplist function-name (rest the-list)))))) | ||||||
|  | 
 | ||||||
|  | (defun extend-apply (function-name param-list) | ||||||
|  |   (eval (cons function-name param-list))) | ||||||
|  | 
 | ||||||
|  | (defun append (listA listB) | ||||||
|  |   (cond | ||||||
|  |    ((null listA) listB) | ||||||
|  |    (t (cons (first listA) (append (rest listA) listB))))) | ||||||
|  | 
 | ||||||
|  | (defun nth (n listA) | ||||||
|  |   (cond | ||||||
|  |    ((equal 0 n) (first listA)) | ||||||
|  |    (t (nth (- n 1) (rest listA))))) | ||||||
| @ -1,11 +1,10 @@ | |||||||
|  | (load "functions.lisp") | ||||||
|  | 
 | ||||||
| (defun reverse (the-list) | (defun reverse (the-list) | ||||||
|   (if the-list |   (if the-list | ||||||
|     (append |     (append | ||||||
|       (reverse (rest the-list)) |       (reverse (rest the-list)) | ||||||
|       (list (first the-list)) |       (list (first the-list))))) | ||||||
|     ) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (defun deep-reverse (the-list) | (defun deep-reverse (the-list) | ||||||
|   (if the-list |   (if the-list | ||||||
| @ -14,10 +13,4 @@ | |||||||
|       (list |       (list | ||||||
|         (if (listp (first the-list)) |         (if (listp (first the-list)) | ||||||
|           (deep-reverse (first the-list)) |           (deep-reverse (first the-list)) | ||||||
|           (first the-list) |           (first the-list)))))) | ||||||
|         ) |  | ||||||
|       ) |  | ||||||
|     ) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| @ -1,4 +1,4 @@ | |||||||
| (load "dlambda.lisp") | (load "../lang/dlambda.lisp") | ||||||
| 
 | 
 | ||||||
| (defun counter (initial-count) | (defun counter (initial-count) | ||||||
|   (let ((count initial-count)) |   (let ((count initial-count)) | ||||||
| @ -7,29 +7,19 @@ | |||||||
|       (dlambda |       (dlambda | ||||||
| 
 | 
 | ||||||
|         (:inc () |         (:inc () | ||||||
|           (setf count (+ count 1)) |           (setf count (+ count 1))) | ||||||
|         ) |  | ||||||
| 
 | 
 | ||||||
|         (:dec () |         (:dec () | ||||||
|           (setf count (- count 1)) |           (setf count (- count 1))) | ||||||
|         ) |  | ||||||
| 
 | 
 | ||||||
|         (:get () |         (:get () | ||||||
|           count |           count) | ||||||
|         ) |  | ||||||
| 
 | 
 | ||||||
|         (:set (value) |         (:set (value) | ||||||
|           (setf count value) |           (setf count value)))))) | ||||||
|         ) |  | ||||||
| 
 | 
 | ||||||
|       ) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (defun fruit-counter (initial-count) | (defun fruit-counter (initial-count) | ||||||
| 
 |  | ||||||
|   (let ((apple-counter (counter initial-count)) |   (let ((apple-counter (counter initial-count)) | ||||||
|         (banana-counter (counter initial-count)) |         (banana-counter (counter initial-count)) | ||||||
|         (coconut-counter (counter initial-count))) |         (coconut-counter (counter initial-count))) | ||||||
| @ -38,66 +28,59 @@ | |||||||
|       (dlambda |       (dlambda | ||||||
| 
 | 
 | ||||||
|         (:inc-apples () |         (:inc-apples () | ||||||
|           (funcall apple-counter :inc) |           (funcall apple-counter :inc)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:dec-apples () |         (:dec-apples () | ||||||
|           (funcall apple-counter :dec) |           (funcall apple-counter :dec)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:get-apples () |         (:get-apples () | ||||||
|           (funcall apple-counter :get) |           (funcall apple-counter :get)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:set-apples (value) |         (:set-apples (value) | ||||||
|           (funcall apple-counter :set value) |           (funcall apple-counter :set value)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:inc-bananas () |         (:inc-bananas () | ||||||
|           (funcall banana-counter :inc) |           (funcall banana-counter :inc)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:dec-bananas () |         (:dec-bananas () | ||||||
|           (funcall banana-counter :dec) |           (funcall banana-counter :dec)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:get-bananas () |         (:get-bananas () | ||||||
|           (funcall banana-counter :get) |           (funcall banana-counter :get)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:set-bananas (value) |         (:set-bananas (value) | ||||||
|           (funcall banana-counter :set value) |           (funcall banana-counter :set value)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:inc-coconuts () |         (:inc-coconuts () | ||||||
|           (funcall coconut-counter :inc) |           (funcall coconut-counter :inc)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:dec-coconuts () |         (:dec-coconuts () | ||||||
|           (funcall coconut-counter :dec) |           (funcall coconut-counter :dec)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:get-coconuts () |         (:get-coconuts () | ||||||
|           (funcall coconut-counter :get) |           (funcall coconut-counter :get)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (:set-coconuts (value) |         (:set-coconuts (value) | ||||||
|           (funcall coconut-counter :set value) |           (funcall coconut-counter :set value)) | ||||||
|         ) | 
 | ||||||
| 
 | 
 | ||||||
|         (t (&rest arguments) |         (t (&rest arguments) | ||||||
|           (list |           (list | ||||||
|             (list 'apples   (funcall apple-counter :get)) |             (list 'apples   (funcall apple-counter :get)) | ||||||
|             (list 'bananas  (funcall banana-counter :get)) |             (list 'bananas  (funcall banana-counter :get)) | ||||||
|             (list 'coconuts (funcall coconut-counter :get)) |             (list 'coconuts (funcall coconut-counter :get)))))))) | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
| 
 | 
 | ||||||
|       ) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| ; Create an instance | ; Create an instance | ||||||
| ; | ; | ||||||
| @ -106,8 +89,7 @@ | |||||||
| ;   23 | ;   23 | ||||||
| ; | ; | ||||||
| (let ((instance (fruit-counter 0))) | (let ((instance (fruit-counter 0))) | ||||||
|   (defun my-fruits (&rest args) (apply instance args)) |   (defun my-fruits (&rest args) (apply instance args))) | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| ; Another way | ; Another way | ||||||
| ; | ; | ||||||
| @ -116,4 +98,3 @@ | |||||||
| ;   23 | ;   23 | ||||||
| ; | ; | ||||||
| (setf my-fruits2 (fruit-counter 10000)) | (setf my-fruits2 (fruit-counter 10000)) | ||||||
| 
 |  | ||||||
| @ -1,4 +1,4 @@ | |||||||
| (load "dlambda.lisp") | (load "../lang/dlambda.lisp") | ||||||
| 
 | 
 | ||||||
| (defun counter (initial-count) | (defun counter (initial-count) | ||||||
|   (let ((count initial-count) |   (let ((count initial-count) | ||||||
| @ -12,46 +12,32 @@ | |||||||
|         (dlambda |         (dlambda | ||||||
| 
 | 
 | ||||||
|           (:inc () |           (:inc () | ||||||
|             (setf count (+ count 1)) |             (setf count (+ count 1))) | ||||||
|           ) |  | ||||||
| 
 | 
 | ||||||
|           (:inc-3 () |           (:inc-3 () | ||||||
|             (funcall this :inc) |             (funcall this :inc) | ||||||
|             (funcall this :inc) |             (funcall this :inc) | ||||||
|             (funcall this :inc) |             (funcall this :inc)) | ||||||
|           ) |  | ||||||
| 
 | 
 | ||||||
|           (:dec () |           (:dec () | ||||||
|             (setf count (- count 1)) |             (setf count (- count 1))) | ||||||
|           ) |  | ||||||
| 
 | 
 | ||||||
|           (:dec-3 () |           (:dec-3 () | ||||||
|             (funcall this :dec) |             (funcall this :dec) | ||||||
|             (funcall this :dec) |             (funcall this :dec) | ||||||
|             (funcall this :dec) |             (funcall this :dec)) | ||||||
|           ) |  | ||||||
| 
 | 
 | ||||||
|           (:get () |           (:get () | ||||||
|             count |             count) | ||||||
|           ) |  | ||||||
| 
 | 
 | ||||||
|           (:set (value) |           (:set (value) | ||||||
|             (setf count value) |             (setf count value)) | ||||||
|           ) |  | ||||||
| 
 | 
 | ||||||
|           (t () |           (t () | ||||||
|             (cons name count) |             (cons name count))))))) | ||||||
|           ) |  | ||||||
| 
 | 
 | ||||||
|         ) |  | ||||||
|       ) |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (let ((instance (counter 0))) | (let ((instance (counter 0))) | ||||||
|   (defun my-counter (&rest args) (apply instance args)) |   (defun my-counter (&rest args) (apply instance args))) | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (setf my-counter2 (counter 10000)) | (setf my-counter2 (counter 10000)) | ||||||
| @ -1,6 +1,3 @@ | |||||||
| (defun fact (x) | (defun fact (x) | ||||||
|   (if (< x 2) 1 |   (if (< x 2) 1 | ||||||
|     (* x (fact (- x 1))) |     (* x (fact (- x 1))))) | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| @ -1,9 +1,6 @@ | |||||||
| (defun problem (n) | (defun problem (n) | ||||||
|   (if (< n 1) nil |   (if (< n 1) nil | ||||||
|     (cons n (problem (- n 1))) |     (cons n (problem (- n 1))))) | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (setf y (problem 20)) | (setf y (problem 20)) | ||||||
| (setf x (problem 20000)) | (setf x (problem 20000)) | ||||||
| 
 |  | ||||||
| @ -1,7 +1,6 @@ | |||||||
| ;; A list containing the values of single-letter Roman numerals. | ;; A list containing the values of single-letter Roman numerals. | ||||||
| (setf roman-number-list | (setf roman-number-list | ||||||
|   '((I 1) (V 5) (X 10) (L 50) (C 100) (D 500) (M 1000)) |   '((I 1) (V 5) (X 10) (L 50) (C 100) (D 500) (M 1000))) | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| ;; Converts a single Roman numeral letter into its equivalent decimal value. | ;; Converts a single Roman numeral letter into its equivalent decimal value. | ||||||
| (defun letter-to-decimal (letter) | (defun letter-to-decimal (letter) | ||||||
| @ -12,19 +11,10 @@ | |||||||
|           (cond |           (cond | ||||||
|             ((null lst) ()) |             ((null lst) ()) | ||||||
|             ((eq (car (car lst)) letter) (car lst)) |             ((eq (car (car lst)) letter) (car lst)) | ||||||
|             (t (funcall f (cdr lst) f)) |             (t (funcall f (cdr lst) f)))) | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
|         roman-number-list |         roman-number-list | ||||||
|         (lambda (lst f) |         (lambda (lst f) | ||||||
|           (cond |           (cond | ||||||
|             ((null lst) ()) |             ((null lst) ()) | ||||||
|             ((eq (car (car lst)) letter) (car lst)) |             ((eq (car (car lst)) letter) (car lst)) | ||||||
|             (t (funcall f (cdr lst) f)) |             (t (funcall f (cdr lst) f)))))))) | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
|       ) |  | ||||||
|     ) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| @ -2,43 +2,30 @@ | |||||||
|   (if (funcall unit-test) |   (if (funcall unit-test) | ||||||
|     (progn |     (progn | ||||||
|       (print (cons t unit-test)) |       (print (cons t unit-test)) | ||||||
|       t |       t) | ||||||
|     ) | 
 | ||||||
|     (progn |     (progn | ||||||
|       (print (cons 'f unit-test)) |       (print (cons 'f unit-test)) | ||||||
|       nil |       nil))) | ||||||
|     ) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (defun run-test-suite (test-suite) | (defun run-test-suite (test-suite) | ||||||
|   (if test-suite |   (if test-suite | ||||||
|     (cons |     (cons | ||||||
|       (run-unit-test (car test-suite)) |       (run-unit-test (car test-suite)) | ||||||
|       (run-test-suite (cdr test-suite)) |       (run-test-suite (cdr test-suite))))) | ||||||
|     ) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (defun unit (test-suite) | (defun unit (test-suite) | ||||||
|   (eval (cons 'and (run-test-suite test-suite))) |   (eval (cons 'and (run-test-suite test-suite)))) | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (defun assert (comparison expected actual) | (defun assert (comparison expected actual) | ||||||
|   (if (funcall comparison expected actual) |   (if (funcall comparison expected actual) | ||||||
|     t |     t | ||||||
|     (progn |     (progn | ||||||
|       (print (list expected 'is 'not comparison actual)) |       (print (list expected 'is 'not comparison actual)) | ||||||
|       nil |       nil))) | ||||||
|     ) |  | ||||||
|   ) |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (defun assert= (expected actual) | (defun assert= (expected actual) | ||||||
|   (assert '= expected actual) |   (assert '= expected actual)) | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| (defun assert-equal (expected actual) | (defun assert-equal (expected actual) | ||||||
|   (assert 'equal expected actual) |   (assert 'equal expected actual)) | ||||||
| ) |  | ||||||
| 
 |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user