robierzo Posted September 20, 2012 Posted September 20, 2012 Hello. I have a list of several points. I need to get two results. 1º-. Sumatori Xn * Yn+1 2º-. Sumatori Yn * Xn+1 Example: (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 Regards Quote
David Bethel Posted September 20, 2012 Posted September 20, 2012 There are probably a lot more elegant ways, but maybe: [b][color=BLACK]([/color][/b]defun db_s1 [b][color=FUCHSIA]([/color][/b]l / tot[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq tot 0[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]> [b][color=MAROON]([/color][/b]length l[b][color=MAROON])[/color][/b] 1[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq tot [b][color=MAROON]([/color][/b]+ tot [b][color=GREEN]([/color][/b]* [b][color=BLUE]([/color][/b]car [b][color=RED]([/color][/b]car l[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cadr [b][color=RED]([/color][/b]cadr l[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] l [b][color=MAROON]([/color][/b]cdr l[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] tot[b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]defun db_s2 [b][color=FUCHSIA]([/color][/b]l / tot[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq tot 0[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]> [b][color=MAROON]([/color][/b]length l[b][color=MAROON])[/color][/b] 1[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq tot [b][color=MAROON]([/color][/b]+ tot [b][color=GREEN]([/color][/b]* [b][color=BLUE]([/color][/b]cadr [b][color=RED]([/color][/b]car l[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]car [b][color=RED]([/color][/b]cadr l[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] l [b][color=MAROON]([/color][/b]cdr l[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] tot[b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]setq lst '[b][color=FUCHSIA]([/color][/b][b][color=NAVY]([/color][/b]9.0 10.0[b][color=NAVY])[/color][/b][b][color=NAVY]([/color][/b]12.0 11.0[b][color=NAVY])[/color][/b][b][color=NAVY]([/color][/b]10.1 11.5[b][color=NAVY])[/color][/b][b][color=NAVY]([/color][/b]11.3 13.0[b][color=NAVY])[/color][/b][b][color=NAVY]([/color][/b]7.0 13.5[b][color=NAVY])[/color][/b][b][color=NAVY]([/color][/b]9.4 12.2[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]prin1 [b][color=FUCHSIA]([/color][/b]db_s1 lst[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]terpri[b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]prin1 [b][color=FUCHSIA]([/color][/b]db_s2 lst[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] -David Quote
Lee Mac Posted September 20, 2012 Posted September 20, 2012 (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 Quote
robierzo Posted September 20, 2012 Author Posted September 20, 2012 The two solutions are very good. It's great. Thank you very much. Regards. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.