newLISP序列化
来源:互联网 发布:活塞坏孩子军团知乎 编辑:程序博客网 时间:2024/05/01 20:38
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)
0 0
- newLISP序列化
- newLISP语法
- newlisp 异常
- newlisp debugger
- newLISP symbol
- newlisp安装
- newLISP Ubuntu环境安装
- newLISP window7 安装
- newlisp 使用crypto模块
- newlisp 启动参数
- newlisp 获取文件名
- newlisp string 操作
- newlisp socket编程实例
- newlisp字符表示
- newlisp的lambda表达式
- newlisp set 函数
- newlisp 注释生成文档
- newlisp 监控redmine
- 助记码的全部更新
- python格式化输出
- cocos2d-x 中添加显示文字的三种方式 LabelTTF 、LabelBMFont 和 LabelAtlas
- AJAX技术
- VLC使用的问题
- newLISP序列化
- final 和 finally你知道多少?
- 高级分组ROLLUP,CUBE,GROUPING,GROUPING SETS操作
- 介绍两个Python web框架:Django & Tornado
- 通用的adapter
- QT快速使用ntohs
- Ubuntu下用docker安装redis镜像和使用redis容器分享
- win7(64)位下WinDbg64调试VMware10下的win7(32位)
- ObReferenceObjectByName函数调用WIN7下的解决