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))))