【问题标题】:How does this lambda get its function argument in common lisp?这个 lambda 如何在 common lisp 中获取它的函数参数?
【发布时间】:2022-11-12 13:36:31
【问题描述】:

我有一个表格列表:

(defvar moo '((:name "vince" :age 35)
              (:name "jess" :age 30)))

我在那个列表上调用这个函数:


(defun test (name)
  (remove-if-not
   #'(lambda (person) (equal (getf person :name) name))
   moo))

(test "vince") ;; function call
;; => ((:name "vince" :age 35))

在 lambda 函数中,(person) 参数是如何填充的? person 也在 getf 中使用,但如果我只在测试函数中提供 name,我不确定它是如何被发现的。

我错过了什么?

【问题讨论】:

    标签: lambda common-lisp sbcl


    【解决方案1】:

    它填写在我的remove-if-not 中。它包含一个调用您的函数的循环,将列表的当前元素作为参数传递。

    忽略remove-if-not 采用的所有选项,它本质上是:

    (defun remove-if-not (func list)
      (loop for item in list
            if (not (funcall func item))
            collect item))
    

    您的 lambda 从 (funcall func item) 获取参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 2014-04-26
      • 2020-08-16
      • 1970-01-01
      相关资源
      最近更新 更多