Prolog为什么乘法符号*是一个未定义的过程?

时间:2016-05-15 01:08:03

标签: prolog multiplication

我正在尝试在Prolog中进行简单的两位数乘法。当我最初启动Prolog而不加载任何文件时,我可以输入:

X is 2 * 2.

我得到4作为答案。但是当我通过使用我的代码打开我的文件来启动Prolog时,上述语句不再起作用了。它说:

ERROR: toplevel: Undefined procedure: (*)/2 (DWIM could not correct goal)

当我加载代码时,我得到以下内容:

Warning: The predicates below are not defined. If these are defined
Warning: at runtime using assert/1, use :- dynamic Name/Arity.
Warning: 
Warning: */2, which is referenced by
Warning:        c:/filepath/project.pl:98:21: 1-st       clause of multiply/3

为什么在我不加载代码时乘法工作,但在加载代码时不起作用?这是我用于乘法的代码的一部分:

:-dynamic(multiply/3).
multiply(X, Y, Z) :- Z is X * Y.

上面两行是我的代码中唯一提到的乘法。 我花了几个小时寻找答案而失败了。也许我用来搜索的关键字不够具体,但很难找到Prolog的答案。难道我做错了什么?这个问题是阻止我完成项目的唯一因素,如果发布这个项目太长而无法使用。

1 个答案:

答案 0 :(得分:2)

我们项目的一部分是修改教授给出的代码。教授包括以下未在任何地方使用过的专栏:

<script>
    $(function () {
        $('.helpicon').on('click', function () {
            if ($(this).hasClass('selected')) {
                $(this).siblings('.helpbox').slideToggle();
            } else {
                $(this).addClass('selected');
                $(this).siblings('.helpbox').slideToggle();
            }
            return false;
        });

    });
</script>

删除时,'is'位于:

:-op(150,xfx,is).

工作并显示正确的答案。