回到最后状态

时间:2013-02-07 14:39:37

标签: lisp common-lisp

有没有办法回到运行时的最后状态?简而言之,保存运行时并重新加载它。但是核心形象太大了(我正在做一个小游戏:-),所以我提出了一个想法,保存了一些重要的数据,然后开始在某条线上运行(也许还有堆栈信息)。

例如:

(defun save ()
  _do-some-magic-to-save-the-state-and-then-exit_)

(defvar data (list 'a 'b 'c)) ; important data
(format t "Hello ")
(save)
(format t "World!~%")

下次,软件可以从停止的位置开始。

$ software
Hello $ software
Hello $ software --load saved_state
World!

但我根本不知道如何在Common Lisp中做到这一点......有人可以给我一些想法吗?

2 个答案:

答案 0 :(得分:5)

这是如何工作的取决于Common Lisp实现。请参阅手册:

答案 1 :(得分:1)

您可能想尝试实施Alex Warth的世界(his thesis的第4章)。这将允许你发芽"一个新的世界,在其中运行您的计算,并定期将子世界中的更改提交到父世界,或者中止并回滚到父级状态。这就像一个无限的撤销,但你可以发芽多个世界/链的撤销。