Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lisp 口齿不清的内省?函数被调用和退出时_Lisp_Introspection - Fatal编程技术网

Lisp 口齿不清的内省?函数被调用和退出时

Lisp 口齿不清的内省?函数被调用和退出时,lisp,introspection,Lisp,Introspection,使用CommonLisp,我假设内省属性。如何将代码添加到公共lisp代码中,该代码将告诉我何时调用函数以及何时完成执行。我想使用任何lisp代码以及对代码的这种特殊修改。我认为通过lisp的AST分析,这应该是可能的。Common lisp有一个跟踪函数,它报告每个指定调用的函数、参数和结果值。以下是Steel Bank版本的文档页面,但您应该在大多数实现中找到类似的内容: 该系统还包括一个探查器: 您可以将其用于一个简单的机构。对于更多涉及的内容,这里是一个很好的讨论 [CL\u用户]>

使用CommonLisp,我假设内省属性。如何将代码添加到公共lisp代码中,该代码将告诉我何时调用函数以及何时完成执行。我想使用任何lisp代码以及对代码的这种特殊修改。我认为通过lisp的AST分析,这应该是可能的。

Common lisp有一个跟踪函数,它报告每个指定调用的函数、参数和结果值。以下是Steel Bank版本的文档页面,但您应该在大多数实现中找到类似的内容:

该系统还包括一个探查器:

您可以将其用于一个简单的机构。对于更多涉及的内容,这里是一个很好的讨论

[CL\u用户]>
(财务主任(北)
“天真的阶乘实现”
(如果(<1 n)
(*n(fac(-n1)))
1))
传真
[CL_用户]>(跟踪fac)
;; 跟踪功能FAC。
(外交事务委员会)
[CL_用户]>(fac 5)
1.跟踪:(FAC'5)
2.跟踪:(FAC'4)
3.跟踪:(FAC'3)
4.跟踪:(FAC'2)
5.跟踪:(FAC'1)
5.跟踪:FAC==>1
4.跟踪:FAC==>2
3.跟踪:FAC==>6
2.跟踪:FAC==>24
1.跟踪:FAC==>120
120
[CL_用户]>
如果是一个选项,那么它可以在其他方法之前、之后和周围运行

[CL_USER]>
(defun fac (n)
    "Naïve factorial implementation"
    (if (< 1 n)
        (* n (fac (- n 1)))
        1))
FAC
[CL_USER]> (trace fac)
;; Tracing function FAC.
(FAC)
[CL_USER]> (fac 5)
1. Trace: (FAC '5)
2. Trace: (FAC '4)
3. Trace: (FAC '3)
4. Trace: (FAC '2)
5. Trace: (FAC '1)
5. Trace: FAC ==> 1
4. Trace: FAC ==> 2
3. Trace: FAC ==> 6
2. Trace: FAC ==> 24
1. Trace: FAC ==> 120
120
[CL_USER]>