2

重複の可能性:
Elisp でラムダ式を渡す方法

私は次のコードを持っています:

(defun my-map (p l)
  (mapcar (lambda (el) (p el)) l))

(defun test ()
  (my-map (lambda (x) (+ x 1)) (list 1 2 3)))

(これは例です - 私が書こうとした実際のコードではありません)。関数 p が見つからないと文句を言います。

Debugger entered--Lisp error: (void-function p)
  (p el)
  (lambda (el) (p el))(1)
  mapcar((lambda (el) (p el)) (1 2 3))
  my-map((lambda (x) (x + 1)) (1 2 3))
  test()
  eval((test) nil)
  eval-expression((test) nil)
  call-interactively(eval-expression nil nil)
  recursive-edit()
  debug(error (void-variable test))
  eval(test nil)
  eval-expression(test nil)
  call-interactively(eval-expression nil nil

paをシンボルとして扱い、外側のスコープに制限された変数ではないと思います。それを機能させる方法は?

4

1 に答える 1

9

を使用しますfuncall

funcall は「C ソース コード」の組み込み関数です。

(funcall FUNCTION &rest ARGUMENTS)

最初の引数を関数として呼び出し、残りの引数をそれに渡します。関数が返す値を返します。したがって、(funcall 'cons 'x 'y) は (x . y) を返します。

于 2012-05-25T06:16:07.263 に答える