Lisp:检查函数确定其所需的参数

标签 lisp inspection

在Python中,我可以这样做:

>>> def foo(x,y,z=1):
    return x+y*z

>>> foo.func_code.co_varnames
('x', 'y', 'z')
>>> foo.func_defaults
(1,)

从中,知道我必须有多少个参数才能调用 foo()。我怎样才能在 Common Lisp 中做到这一点?

最佳答案

大多数实现都提供了执行此操作的方法,但没有一个是标准化的。如果您确实需要它,Swank( SLIME 的 Common Lisp 部分)有一个名为 swank-backend:arglist 的函数。据我所知,这符合您的要求:

CCL> (swank-backend:arglist 'if)
(TEST TRUE &OPTIONAL FALSE)
CCL> (swank-backend:arglist 'cons)
(X Y)
CCL> (swank-backend:arglist (lambda (a b c &rest args)))
(A B C &REST ARGS)

不过,我不确定您是否可以依赖它在未来仍然可用。

关于Lisp:检查函数确定其所需的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404662/

相关文章:

python - 装饰器将函数状态从方法更改为函数

java - IntelliJ IDEA : Can I specify which class is in "secure context"

java - 关闭 IntelliJ 中公共(public)函数的未使用代码警告

python - 我怎样才能让 inspect.getsource 响应源代码的变化?

macros - 在运行时处理内部变量和数据结构的 LISP 宏

lisp - 如何根据 elisp 中的一个条件设置一堆变量?

clojure - repl/source 函数在 Clojure 中不起作用

lisp - 无法在 lisp 中将字符串/字符转换为字节

计划和让错误