Comment faire la somme d'une liste de nombres dans Emacs Lisp?
Ceci fonctionne:
(+ 1 2 3)
6
Cela ne fonctionne pas:
(+ '(1 2 3))
Cela fonctionne si 'cl-* " est chargé:
(reduce '+ '(1 2 3))
6
Si reduce toujours été disponible, je pourrais écrire:
(defun sum (L)
  (reduce '+ L))
(sum '(1 2 3))
6
Quelle est la meilleure pratique pour définir des fonctions telles que <!--6?
8 réponses
si vous manipulez des listes et écrivez du code fonctionnel dans Emacs, installez dash.el bibliothèque. Alors vous pourriez utiliser son -sum fonction:
(-sum '(1 2 3 4 5)) ; => 15
    	                fonction récursive linéaire (somme L)
;;
;; sum
;;
(defun sum(list)    
    (if (null list)
        0
        (+ 
            (first list) 
            (sum (rest list))
        )   
    )   
)
    	                Vous pouvez définir votre fonction personnalisée pour calculer la somme d'une liste passée.
(defun sum (lst) (format t "The sum is ~s~%" (write-to-string (apply '+ lst))) 
EVAL: (sum '(1 4 6 4))
-> The sum is "15"
    	                Cela devrait faire l'affaire:
(defun sum-list (list)
  (if list
      (+ (car list) (sum-list (cdr list)))
    0))
 Edit: Voici un bon lien qui explique car et cdr - ils sont essentiellement des fonctions qui vous permettent de saisir le premier élément d'une liste et récupérer une nouvelle liste sans le premier élément.
voiture -> premier élément de la liste
cdr - > prenez tous les éléments de la liste sauf le premier élément
(defun sumup (x) (if (equal x nil) 0 (+(car x) (sumup (cdr x))))
(sumup '(5 7 8 10))
30
(eval (cons '+ '(1 2 3))) -- bien que pas aussi bon que 'réduire'
(inscrire (nombre à la chaîne de caractères)'+ '(1 2 3))))