莫莫茶 发表于 2015-6-10 22:53:20

请问如何求出列表中前n个变量的和或后n个变量的和

请问如何求出列表中前n个变量的和或后n个变量的和

ZZXXQQ 发表于 2015-6-11 08:01:20

(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:31:17

本帖最后由 77077 于 2015-6-11 09:32 编辑


(apply '+ (sublist lst 0 (1- n)))
(apply '+ (sublist lst n (length lst)))

鱼与熊掌 发表于 2015-6-11 15:56:10

;_$ (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:00:18

本帖最后由 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


重慶崽兒 发表于 2015-6-11 23:37:07

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并没有参与计算啊

llsheng_73 发表于 2015-6-12 00:18:21

重慶崽兒 发表于 2015-6-11 23:37 static/image/common/back.gif
73大大
(vl-remove-if-not'(lambda(x)(

不需要它参与计算,只需要它依次取lst中的元素时,计数器I能进行累加
然而不要它却又不行,因为语法这样规定的

重慶崽兒 发表于 2015-6-12 15:20:36

llsheng_73 发表于 2015-6-12 00:18 static/image/common/back.gif
不需要它参与计算,只需要它依次取lst中的元素时,计数器I能进行累加
然而不要它却又不行,因为语法这样 ...

明白了   呵呵 还能这样
谢谢

vladimirputin 发表于 2016-10-23 14:00:31

不错的资料,谢谢楼主分享啊。
页: [1]
查看完整版本: 请问如何求出列表中前n个变量的和或后n个变量的和