robierzo 发表于 2022-7-6 07:30:15

计算成员的sumatori

你好我列出了几点。我需要得到两个结果。
1º-. Sumatori Xn*Yn+1
2º-. Sumatori Yn*Xn+1
 
例子:

(setq lista_puntos '((9.0 10.0)(12.0 11.0)(10.1 11.5)(11.3 13.0)(7.0 13.5)(9.4 12.2)))

1º-.Sumatori Xn*Yn+1
(9.0 x 11.0)+(12.0 x 11.5)+(10.1 x 13.0)+(11.3 x 13.5)+(7.0 x 12.2)=606.25
 
2º-. Sumatori Yn*Xn+1
(10.0 x 12.0)+(11.0 x 10.1)+(11.5 x 11.3)+(13.0 x 7.0)+(13.5 x 9.4)=578.95
 
当做

David Bethel 发表于 2022-7-6 07:56:47

可能还有很多更优雅的方式,但也许:
 

(defun db_s1 (l / tot)
(setq tot 0)
(while (> (length l) 1)
   (setq tot (+ tot (* (car (car l)) (cadr (cadr l))))
         l (cdr l)))
tot)

(defun db_s2 (l / tot)
(setq tot 0)
(while (> (length l) 1)
   (setq tot (+ tot (* (cadr (car l)) (car (cadr l))))
         l (cdr l)))
tot)

(setq lst '((9.0 10.0)(12.0 11.0)(10.1 11.5)(11.3 13.0)(7.0 13.5)(9.4 12.2)))

(prin1 (db_s1 lst))
(terpri)
(prin1 (db_s2 lst))


 
 
-大卫

Lee Mac 发表于 2022-7-6 08:30:14

(defun f1 ( l ) (apply '+ (mapcar '(lambda ( a b ) (* (car a) (cadr b))) l (cdr l))))
(defun f2 ( l ) (apply '+ (mapcar '(lambda ( a b ) (* (cadr a) (car b))) l (cdr l))))
_$ (setq l '((9.0 10.0) (12.0 11.0) (10.1 11.5) (11.3 13.0) (7.0 13.5) (9.4 12.2)))
((9.0 10.0) (12.0 11.0) (10.1 11.5) (11.3 13.0) (7.0 13.5) (9.4 12.2))
_$ (f1 l)
606.25
_$ (f2 l)
578.95

robierzo 发表于 2022-7-6 08:35:19

这两种解决方案非常好。太棒了。非常感谢你。
当做
页: [1]
查看完整版本: 计算成员的sumatori