【问题标题】:Is it possible to determine the calling context (function, symbol) in a Common Lisp function?是否可以在 Common Lisp 函数中确定调用上下文(函数、符号)?
【发布时间】:2015-02-03 12:10:55
【问题描述】:

可能有几种方法可以通过宏和代码遍历器来实现这种自省功能,但有没有更简单(可能,依赖于实现)的方法?我想,调用然后释放调试器可以打开对帧堆栈的访问,但这似乎也有点矫枉过正。

有哪些更简单的想法可以尝试?

【问题讨论】:

  • 你真正想做什么?
  • 研究?这个不适合实际应用。
  • 大多数实现都有一个可以显示调用堆栈的调试器。因此需要有一个特定于实现的函数来获取调用堆栈信息。请注意,调用堆栈不会显示完整的信息。可以消除调用 (TCO),可以内联代码,可以扩展宏,...
  • 还有uiop:print-backtrace。 Uiop 带有 ASDF,它带有许多 Lisp 实现。

标签: common-lisp sbcl


【解决方案1】:

宏可以接受一个在调用上下文的词法环境中传递的 &env 参数。然后您可以使用这些函数查询词法环境:https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node102.html

尤其是variable-informationfunction-information

我相信还有一些特定于实现的方法可以在运行时获取当前的词法环境。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2018-01-29
    • 2018-09-23
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多