内部谓词评估/ 2和评估2/2

时间:2019-08-21 12:00:33

标签: prolog sicstus-prolog

SICStus Prolog 4.5.1的执行分析器向我报告了以下内容:

| ?- print_profile.
       insns   try/retry      called        name
----------------------------------------------------------------
                          ...
----------------------------------------------------------------
                             1769156/8845768    prolog:evaluate/2
                             7076612/8845768    prolog:evaluate2/2
    76073600     7076616     8845768        prolog:evaluate2/2
                             7076612/8845768    prolog:evaluate2/2
----------------------------------------------------------------
                          ...

出于好奇:evaluate2/2是什么,我如何找出Prolog代码的哪些部分调用它?

(我的最佳猜测是:evaluate/2evaluate2/2评估算术表达式,当某些(is)/2目标被编译时,算术表达式仍然可变...)

1 个答案:

答案 0 :(得分:3)

您的猜测是正确的。 prolog:evaluate/2prolog:evaluate2/2谓词是无法在C中直接评估表达式(或在JIT编译器中进行汇编)时使用的辅助函数。通常是因为(子)表达式在编译时是变量,然后在运行时是复合项。

当解释后的代码(断言或查询)使用is/2和其他谓词评估算术表达式时,也会调用它们。

除了询问SICStus开发人员(如我)之外,没有其他方法可以知道这些事情。

相关问题