* 中文, unicode 如何支持?
* 各种诡异的符号是什么意思? ' ` # , .......
*# 如何调用外部程序?
# trivial-shell 和 shelisp 这两个包都可以,我个人觉得后者更方便一些, 只是不在 quicklisp 里.
*# 如何序列化和反序列化?
# plist (list :a xx :b xx) 可以作为一种选择
# print 可以把 lisp object 以 lisp 可反序列化的方式序列化, 利用 with-open-file 就可以了, 反序列化时,使用 read 就可以了.
* 如何进行进程间通信?网络通信?
* symbol 是什么东东?
*# 标准输入输出交互
# ( read-line *query-io*)
# ( format t/nill/*query-io* "~a" some)
*# 在使用 trivial-shell 或 shelisp 时, 如果是在 sbcl 环境下,不会有任何问题,但是在 slime 环境下, 出现如下错误:
Lisp connection closed unexpectedly: connection broken by remote peer
# (setf *log-events* t) 再执行命令,可以看一下 inferior-lisp, 里面有 (:EXTERNAL-FORMAT :LATIN-1):
the character with code 26376 cannot be encoded.
;; type: SWANK::SWANK-ERROR
;; encoding: iso-latin-1-unix vs. NIL
;; style: :SPAWN dedicated: NIL]
说明是编码出了问题. 测试验证,确实是这样: 当有汉字出现时,就会这样.
# 解决办法,从 " Tips" 找到解决办法如下:
* 为什么下面两种用法都是可行的?
(mapcar (lambda (x) (+ x 1)) (list 3 4 5))
(mapcar #'(lambda (x) (+ x 1)) (list 3 4 5))
但是用命名函数就不行, 比如 (mapcar inc (list 3 4 5)) 就会出错.
同时, (mapcar 'inc (list 3 4 5)) 和 (mapcar #'inc (list 3 4 5)) 则都不会出错
是不是可以认为,"只要不求值,就不区别数据和函数"?
* (list 3 4 5) 实现是的把 3 4 5 搞成一个 list, 反操作是什么呢? 怎样把一个 list 中的东东拆出来作为函数的参数呢? 就是如何把一个 form 的第一个东东换掉呢?
# 答案是,使用 apply; 另外, 如果不是一个列表, 使用 funcall, 即 (funcall f a b c) 等价于 (f a b c)
* read 函数如何 parse 它的输入呢?
* 为什么 (+ 1 2 '(3 4)) 会出错, 而 (apply #'+ 1 2 '(3 4)) 却得到 10 呢?
阅读(876) | 评论(0) | 转发(0) |