at the uLisp page there’s a function to load uLisp functions from a file. It looks rather similar to:
(defun load (filename) (with-sd-card (s filename) (loop (let ((line (read s))) (if (null line) (return (globals)) (eval line))))))
Now I wrote a function to save the whole environment to a textfile:
(defun save (fn) (princ "Saving:") (with-sd-card (str fn 2) (mapcar (lambda (n) (princ " ") (princ n) (princ "(defvar " str) (princ n str) (princ " '" str) (pprint (eval n) str) (princ ")" str) (terpri str) (terpri str)) (globals))) nothing)
You can test these functions with:
(defvar data '(1 4 9 16 25 36 49)) (defvar four 4) ((defun fac (n) (if (< n 2) 1 (* n (fac (- n 1))))) (save "test.lsp")
Restart the board, then:
(require 'load) -- I stored this function in my LispLibrary (load "test.lsp") (globals) -- returns (save fac data four) four -- returns 4 data -- returns (1 4 9 16 25 36 49) fac -- returns (lambda (n) (if (< n 2) 1 (* n (fac (- n 1)))))
The formatting in the created file is not perfect, but it is working and the functions and variables can be read back using (load).
So you can develop a few functions with uLisp and save your work in a textfile, which will not depend on the version of uLisp used (as images are).
If ‘resetautorun’ is defined in your uLisp version you can create a small image to load the rest of the code from textfiles at systemstart.
Comments are welcome!
As I am a lisp newby, what do you think about the code of (save) (it took me a while to get it working ;-) )?
How would be the ‘lispy’ way of writing the function (save)?