私は現在 Lisp を学ぼうとしており、Linux で emacs を使用しています。できる限り、2 つの関数を作成しました。
どちらの関数も、最初にリストの最初の要素を削除します。
series
指定されたリストにすべての要素を追加します。parallel
1) リスト内の各数値の逆数を取得し、次に 2) リスト内のすべての要素を追加し、次に 3) 要素の合計の逆数を取得します。
コード:
(defun series (lst)
(apply #'+' (cdr lst)) )
(defun parallel (lst)
(/ 1 (apply #'+' (apply #'/' (cdr 'lst ) ) ) ))
関数を評価できますが、関数を使用しようとすると、次のようになります。
(series (list 3 3 4 5))
次のエラーが表示されます:値 CDR は期待されるタイプ NUMBER ではありません。 私はこれを見て、なぜemacsはcdrを関数ではなく数値として扱っているのでしょうか? Lisp と Emacs は初めてなので、このエラーを修正する方法がわかりません。どんな助けでも大歓迎です。
アップデート
このコードには問題があり、うまくいくと思います...
(defun series (lst)
(apply #'+ (cdr lst) ))
(defun parallel(lst)
(/ 1 (apply #'+ (mapcar #'/ (make-list (- (length lst) 1) :initial-element 1) (cdr lst) ) )))
うまくいけば、私がやろうとしていたことは今理解されています。