2

私は現在 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)  ) )))

うまくいけば、私がやろうとしていたことは今理解されています。

4

2 に答える 2

3

LISP パーサーを混乱させる余分なアポストロフィがあります。+関数を参照する構文は#'+;だけです。「クローズクォート」はありません。

于 2012-05-04T01:04:01.283 に答える