请问如何求出列表中前n个变量的和或后n个变量的和
请问如何求出列表中前n个变量的和或后n个变量的和 (defun n+ (lst n)(setq sum 0 i 0)
(if (> (length lst) n)
(repeat n
(setq sum (+ (nth i lst) sum))
(setq i (1+ i))
)
)
sum
)(defun +n (lst n)
(n+ (reverse lst) n)
) 本帖最后由 77077 于 2015-6-11 09:32 编辑
(apply '+ (sublist lst 0 (1- n)))
(apply '+ (sublist lst n (length lst)))
;_$ (LM:sublst '(1 2 3 4 5 6 7 8) 2 4)
;(3 4 5 6)
;
;_$ (LM:sublst '(1 2 3 4 5 6 7 8) 2 nil)
;(3 4 5 6 7 8)
;
(defun cx-sublst ( lst idx len / rtn )
(setq len (if len (min len (- (length lst) idx)) (- (length lst) idx))
idx (+idx len)
)
(repeat len (setq rtn (cons (nth (setq idx (1- idx)) lst) rtn)))
) 本帖最后由 llsheng_73 于 2015-6-11 22:19 编辑
(DEFUN N+(N F LST / I)
(setq i 0 f(if f vl-remove-if-not vl-remove-if ))
(apply'+(f'(lambda(x)(<=(setq i(1+ i))n))lst))
)
或者
(defun sublst(m n lst / i)
(setq i 0)
(vl-remove-if-not'(lambda(x)(<= m(setq i(1+ i))n))lst)
)
(defun N+(n f lst / a b)
(apply'+(sublst(if f 0 n)(if f(1+ n)(length lst))lst))
)
(N+ 4 t '(1 2 3 4 5 6 7 8 9 10))==>10
(N+ 4 nill '(1 2 3 4 5 6 7 8 9 10))==>45
llsheng_73 发表于 2015-6-11 22:00 static/image/common/back.gif
或者
73大大
(vl-remove-if-not'(lambda(x)(<= m (setq i(1+ i)) n))lst)
这句话中表lst中的元素是怎么参与计算的啊没明白
lambda(x)中的X并没有参与计算啊 重慶崽兒 发表于 2015-6-11 23:37 static/image/common/back.gif
73大大
(vl-remove-if-not'(lambda(x)(
不需要它参与计算,只需要它依次取lst中的元素时,计数器I能进行累加
然而不要它却又不行,因为语法这样规定的 llsheng_73 发表于 2015-6-12 00:18 static/image/common/back.gif
不需要它参与计算,只需要它依次取lst中的元素时,计数器I能进行累加
然而不要它却又不行,因为语法这样 ...
明白了 呵呵 还能这样
谢谢 不错的资料,谢谢楼主分享啊。
页:
[1]