【问题标题】:How many arguments does a function take?一个函数需要多少个参数?
【发布时间】:2012-06-25 20:34:45
【问题描述】:

如何获得一些函数参数的 lambda 列表规范,或者至少需要一些参数?

例如:

(defun a (a b) )
(get-arg-list #'a) ;-> '(a b)

【问题讨论】:

    标签: lisp common-lisp


    【解决方案1】:

    最简单的方法是使用 SLIME 使用的 SWANK 库。

    使用方法是加载SLIME,通过Quicklisp最容易完成:

    (ql:quickload "swank")
    

    然后,您可以使用以下函数获取参数列表:

    CL-USER> (swank-backend:arglist #'a)
    (A B)
    

    【讨论】:

    • 一点纠正,不能快速加载“粘液”,因为,quicklisp 在它的默认存储库中没有它。但我可以(ql:quickload "swank")。
    • 谢谢。这是非常真实的。这是一个错字。我会修复帖子。
    【解决方案2】:

    Common Lisp 提供了 FUNCTION-LAMBDA-EXPRESSION 函数,它可以恢复源表达式,然后包含 lambda 列表。

    LispWorks 定义了一个函数FUNCTION-LAMBDA-LIST,它返回参数列表。

    许多其他实现在某些内部包中具有某种形式的ARGLIST 函数。

    许多 Common Lisp 用户使用 SLIME,这是 GNU Emacs 编辑器的一个非常聪明的编辑器扩展。它有一个名为 SWANK 的 Common Lisp 后端。 SWANK 源代码为各种 Common Lisp 实现提供各种接口,包括获取函数的 arglist。

    【讨论】:

      【解决方案3】:

      这是特定于实现的,但这个 CLHS 函数可能会帮助您入门 - http://clhs.lisp.se/Body/f_descri.htm

      【讨论】:

      • 顺便说一句,你知道一个库,它会为主要实现引入一些抽象级别吗?
      • 您好 Necto,请查看 Elias 和 Rainer 的其他答案。 (顺便说一句,Rainer 有一个非常漂亮的页面,不知道它是否仍然在线显示 Common Lisp 的所有优点)
      猜你喜欢
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 2011-10-07
      • 1970-01-01
      相关资源
      最近更新 更多