在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/