cl-xmpp、cl-sasl编码函数string-to-utf8的一个bug

在使用cl-xmpp登录gtalk过程中,发现库的一个小问题,这个问题在cl-sasl上面的一个编码转换函数,发现传入为nil的情况下,挂了,原因很明白,nil的时候就不能继续操作了,然后修改后的代码是这样:

;;seems have some bug in sasl-string-to-utf8 if the string is nil it run error ? rewrite it will be ok :).

(in-package :sasl)
(defun string-to-utf8-lisp (string)
"Convert STRING to

消除递归溢出的办法

在做lisp解释器的时候发现,eval跟apply函数相互调用,而eval又自身调用自己处理过程类似二叉树遍历,比如跑这个(define (p) (p)),而后调用(p)就会堆栈溢出,从backtrace中可以发现都是eval挂了,消除递归目前我知道有四种方法可以消除递归调用:

  • 对于普通函数,逻辑上可以修改成循环方式,可以消除递归上的困扰。
  • 一定要使用递归的,可以修改成尾递归,或许编译器可以帮你优化,大部分编译器可以做到。
  • 对于二叉树类型的递归,因为一个要调用left、right两个分支,而这个有点棘手,我采用的方法是消除其中一个,把它修改成goto