# How to sum a list of numbers in Emacs Lisp?

This works:

(+ 1 2 3) 6

This doesn't work:

(+ '(1 2 3))

This works if 'cl-*' is loaded:

(reduce '+ '(1 2 3)) 6

If reduce were always available I could write:

(defun sum (L) (reduce '+ L)) (sum '(1 2 3)) 6

What is the best practice for defining functions such as sum?

## Answers

(apply '+ '(1 2 3))

If you manipulate lists and write functional code in Emacs, install dash.el library. Then you could use its -sum function:

(-sum '(1 2 3 4 5)) ; => 15

Linearly recursive function (sum L)

;; ;; sum ;; (defun sum(list) (if (null list) 0 (+ (first list) (sum (rest list)) ) ) )

You can define your custom function to calculate the sum of a list passed to it.

(defun sum (lst) (format t "The sum is ~s~%" (write-to-string (apply '+ lst))) EVAL: (sum '(1 4 6 4)) -> The sum is "15"

This ought to do the trick:

(defun sum-list (list) (if list (+ (car list) (sum-list (cdr list))) 0))

Edit: Here is another good link that explains car and cdr - basically they are functions that allow you to grab the first element of a list and retrieve a new list sans the first item.

**car** -> take first element of list

**cdr** -> take all elements of the list except first element

(defun sumup (x) (if (equal x nil) 0 (+(car x) (sumup (cdr x)))))

(sumup '(5 7 8 10))

30

(eval (cons '+ '(1 2 3))) -- though not as good as 'reduce'

(insert (number-to-string (apply '+ '(1 2 3))))