我们知道,C语言有return 关键字,return的效果是,当语句读到这个return时,函数或者程序就跳出所有语句,然后返回return语句后面的值,函数终结。而goto则是无条件转移到指定语句。
在lisp中,语句如果是层层嵌套的,括号内的语句没完,是不会跳转的,如何能像其他语言那样,在本函数内实现return的效果或者goto的效果呢?
我在lisp中测试了一下,发现很难实现这两种效果!
下面是我的例子: - (defun fff (x jump) ;;x这个参数可有可无
- (cond
- ((= jump 10) (setq return 31))
- ((= jump 20) (setq return 21))
- ((= jump 30) (setq return z ))
- (t
- (setq i 0)
- (while (< i 50)
- (setq x 1)
- (if (= i 10);;本想跳出while循环的,直接返回值
- (setq jZ 10
- return (fff x jZ)
- )
- )
- (setq y 2)
- (if (= jump 20);;没办法跳出去
- (setq jZ 20
- return (fff x jZ)
- )
- )
- (setq z 31)
- (if (= z 31);;没办法跳出去
- (setq JZ 30
- return (fff x JZ)
- )
- )
- (setq i (1+ i))
- )
- (setq return 100)
- )
- )
- )
-
各位能帮我想想办法,谢谢了!
|