Common Lisp是否有任何持久性解决方案,例如Elephant允许函数持久性?目前我的应用程序在db上存储一个标识符,稍后在函数表中搜索它,但是这种方法不允许存储动态创建的函数。Common Lisp中的函数持久性
9
A
回答
4
这不是一个数据库持久性机制,但最常见的Lisp有包括函数在内的各种对象的方式writing FASLs。例如:
cl-user(1): (compile (defun hello() (format t "~&Hello~%")))
hello
nil
nil
cl-user(2): (excl:fasl-write (symbol-function 'hello) "/tmp/hello.fasl")
t
cl-user(3): (excl:fasl-read "/tmp/hello.fasl")
(#<Function hello @ #x1000a964d2>)
你可以写一个流(这里我用的方便的文件),所以你可以平凡捕捉那些字节,并将它们塞进一个数据库,如果你愿意的话。
1
1
您可以查看保存Lisp图像。这允许保存“足够的信息以便稍后重新启动Lisp进程”。将图像加载到图像后,可以保存您的功能。
这也可能是有点超出你找什么更先进的,但这里是一个(非常)简要介绍了过程:Saving a Core Image
2
Common Cold可能是你想要的。它包含可序列化的闭包和可序列化的延续。
3
帕斯卡尔布吉尼翁给了standard solution on comp.lang.lisp。基本上你必须将源代码表格写入一个文件中,然后它就是LOAD
它。
(defvar *anon*)
(defun save-anonymous-function (fname args body)
(let ((fname (make-pathname :type "LISP" :case :common :defaults fname)))
(with-open-file (src fname :direction :output
:if-does-not-exist :create :if-exists :supersede)
(print `(defparameter *anon* (lambda ,args ,body)) src))
(compile-file fname)))
然后,您必须阅读文件并将其存储在数据库中。为了恢复它,你需要从数据库中获取它并在加载之前将其写入文件中。
(defun load-anonymous-function (fname)
(let ((*load-verbose* nil)
(*anon* nil)) ; to avoid modifying the global one.
(load fname)
*anon*))
0
相关问题
- 1. Common Lisp EVAL函数语录
- 2. 传递函数列表中的Common Lisp
- 3. Common Lisp中的高阶函数语法
- 4. 调用的函数Common Lisp的列表
- 5. 返回错误值的Common Lisp函数
- 6. Common Lisp中
- 7. 与Common Lisp中
- 8. 的#ifndef Common Lisp中
- 9. Common Lisp a Lisp-n?
- 10. Common Lisp:在后台运行函数
- 11. 持久性的JavaScript函数对象中
- 12. 关于Common Lisp中
- 13. 规则Common Lisp中
- 14. 如果Common Lisp中
- 15. 如何Common Lisp中
- 16. 替换Common Lisp中
- 17. Common Lisp的Clojure中的PROGV
- 18. Common Lisp流?
- 19. Step Eval Common Lisp
- 20. “unfold”for common lisp?
- 21. Predicates Common Lisp
- 22. Common Lisp SublimeREPL
- 23. Common Lisp Binary Tree
- 24. Scheme或Common Lisp?
- 25. common lisp和emacs
- 26. Common Lisp Loop Trouble
- 27. Common Lisp Timer
- 28. Scheme vs Common Lisp
- 29. Common Lisp中的绘图树
- 30. Common Lisp中的Stackoverflow Mergesort
但是你应该注意,它不在CL标准中。 – 2009-05-20 06:54:52