我想做一个通用函数,仿substr的功能,对表进行截取,代码如下:- ;(setq lst (list 1 2 3 4 5 6 7))
- ;测试(sublst lst 3 3)-->(3 4 5)
- ;测试(sublst lst 3 nil)-->(3 4 5 6 7)
- ;测试(sublst lst 3 8)-->(3 4 5 6 7)
- (defun sublst (lst start lenth / lst2 nlen)
- (setq lst2 (list))
- (if (or (null lenth) (> lenth (- (length lst) start)))
- (setq lenth (1+ (- (length lst) start)))
- )
- (setq nlen (1- (+ start lenth)))
- (repeat lenth
- (setq lst2 (cons (nth (setq nlen (1- nlen)) lst) lst2))
- )
- lst2
- )
现在发现lenth这个参数不能为空,比如(sublst 3),直接就给我报错误
; 错误: 参数太少
不知道这个问题能不能解决。也就是说defun可不可以指定可选参数?
|