首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当谓词已经定义时,xsb“无过程usermod”

当谓词已经定义时,xsb“无过程usermod”
EN

Stack Overflow用户
提问于 2016-05-18 08:03:19
回答 1查看 928关注 0票数 1

所以在我的档案里

代码语言:javascript
复制
:- use_module(standard, datime/1).

today(Y, M, D) :-
    datime(datime(Y, M, D, _, _, _).

在命令行中直接运行此命令将给出

代码语言:javascript
复制
XSB Version 3.6. (Gazpatcho) of April 22, 2015
[x86-pc-windows; mode: optimal; engine: slg-wam; scheduling: local]
[Build date: 2015-04-22]

| ?- use_module(standard, datime/1).

yes
| ?- datime(datime(Y, M, D, _, _, _)).

Y = 2016
M = 5
D = 17

yes

但是,加载文件本身并运行该函数会导致错误。

代码语言:javascript
复制
| ?- [utils].
[Compiling .\utils]
[utils compiled, cpu time used: 0.0780 seconds]
[utils loaded]

yes
| ?- today(Y, M, D).
++Error[XSB/Runtime/P]: [Existence (No procedure usermod : today / 3 exists)] []
Forward Continuation...
... machine:xsb_backtrace/1  From C:\Program Files (x86)\XSB\syslib\machine.xwam
... loader:load_pred1/1  From C:\Program Files (x86)\XSB\syslib\loader.xwam
... loader:load_pred0/1  From C:\Program Files (x86)\XSB\syslib\loader.xwam
... loader:load_pred/1  From C:\Program Files (x86)\XSB\syslib\loader.xwam
... x_interp:_$call/1  From C:\Program Files (x86)\XSB\syslib\x_interp.xwam
... x_interp:call_query/1  From C:\Program Files (x86)\XSB\syslib\x_interp.xwam
... standard:call/1  From C:\Program Files (x86)\XSB\syslib\standard.xwam
... standard:catch/3  From C:\Program Files (x86)\XSB\syslib\standard.xwam
... x_interp:interpreter/0  From C:\Program Files (x86)\XSB\syslib\x_interp.xwam
... loader:ll_code_call/3  From C:\Program Files (x86)\XSB\syslib\loader.xwam
... standard:call/1  From C:\Program Files (x86)\XSB\syslib\standard.xwam
... standard:catch/3  From C:\Program Files (x86)\XSB\syslib\standard.xwam

你知道为什么会这样吗?怎么解决呢?这种情况也发生在文件中的其他谓词中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 09:06:28

您的代码有三个问题:

  1. 你对today/3的声明缺少了一个关闭的)
  2. today/3不导出
  3. use_module/2期望一个符号列表作为第二个参数,或者使用import sym from mod

如果将utils.P文件定义为

代码语言:javascript
复制
:- import datime/1 from standard.
:- export today/3.
today(Y, M, D) :- datime(datime(Y, M, D, _, _, _)).

您可以以下列任何一种方式使用它:

直接导入谓词:

代码语言:javascript
复制
| ?- import today/3 from utils.

yes
| ?- today(Y,M,D).

Y = 2016
M = 5
D = 18

使用:使用限定名

代码语言:javascript
复制
| ?- utils:today(Y,M,D).

Y = 2016
M = 5
D = 18

直接加载模块

代码语言:javascript
复制
| ?- [utils].
[utils loaded]

| ?- today(Y,M,D).

Y = 2016
M = 5
D = 18
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37293659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档