首页 > 代码库 > newLISP序列化
newLISP序列化
newLISP序列化主要是指list表达式如何转换成string,存储在文件或者数据库中。然后读取并转换成list表达式。
先看简单的
list转换成string
(setf a ‘(1 2 3 4))
(1 2 3 4)
> (string a)
"(1 2 3 4)"
string转换成list
(list? (eval-string (string "‘" b)))
true
这行代码需要说明一下。需要使用eval-string才能将string转换成list.
并且注意需要前面加上单引号以表示这是个list。
(string "‘" b)
"‘(1 2 3 4)"
如果想还原(setf a ‘(1 2 3 4))到这个list表达式,还需要对b字符串添加如下代码:
(list? (eval-string (string "(setf a ‘" b ")")))
true
也就是添加(setf a 语句。
list保存到文件中
有了前面的基础,可以先将list转换成字符串,然后将字符串保存到文件中。比如:
(if (string? graph-str) (write-file "graph-tmp.lsp" (string "(set ‘graph ‘"graph-str ")")))
注意,这里要么字符串中添加set 语句,要么添加单引号。
从文件中读取并得到list
然后用load语句直接加载文件
(load "graph-tmp.lsp")
list保存到数据库
将list转换成string,然后插入到数据库中。有了前面的基础,问题很简单。
读取数据库后变成list
从数据库中读取字符串,然后加上单引号或者setf语句后,用eval-string求值。
source和save
source和save可以将context信息也序列化成字符串,比如下面的代码:
> (new Tree ‘MyTree) MyTree > (MyTree "a" 1) 1 > (MyTree "b" 2) 2 > (source ‘MyTree) "\n(context ‘MyTree)\n\n(set ‘_a 1)\n\n(set ‘_b 2)\n\n\n(context MAIN)\n\n" > (save "mytree.lsp" ‘MyTree) true
文件mytree.lsp的内容如下:
(context ‘MyTree) (set ‘_a 1) (set ‘_b 2) (context MAIN)
newLISP序列化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。