【问题标题】:How to call lambda passed a parameter in LISP [duplicate]如何调用 lambda 在 LISP 中传递参数 [重复]
【发布时间】:2012-05-25 05:56:15
【问题描述】:

可能重复:
How to pass a lambda expression in 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

我猜它会将p 视为符号,而不是外部范围内的变量。如何让它发挥作用?

【问题讨论】:

标签: lisp elisp


【解决方案1】:

你想使用funcall

funcall 是“C 源代码”中的内置函数。

(funcall FUNCTION &rest ARGUMENTS)

将第一个参数作为函数调用,并将剩余的参数传递给它。 返回函数返回的值。因此, (funcall 'cons 'x 'y) 返回 (x . y)。

【讨论】:

    猜你喜欢
    • 2020-08-03
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2021-03-19
    • 2011-09-27
    相关资源
    最近更新 更多