web-dev-qa-db-ja.com

Emacs Lispで数字のリストを合計する方法は?

これは機能します:

(+ 1 2 3)
6

これは機能しません:

(+ '(1 2 3))

これは、 'cl-* 'がロードされます:

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

reduceが常に利用可能であれば、次のように書くことができます。

(defun sum (L)
  (reduce '+ L))

(sum '(1 2 3))
6

sumなどの関数を定義するためのベストプラクティスは何ですか?

29
jfs
(apply '+ '(1 2 3))
65
kmkaplan

リストを操作してEmacsで関数型コードを書く場合は、インストール dash.el ライブラリ。次に、その -sum 関数:

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

線形再帰関数(合計L)

;;
;; sum
;;
(defun sum(list)    
    (if (null list)
        0

        (+ 
            (first list) 
            (sum (rest list))
        )   
    )   
)
2
Kristo Aun

カスタム関数を定義して、渡されたリストの合計を計算できます。

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