1

だから私のファイルには

:- use_module(standard, datime/1).

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

これをコマンドラインで直接実行すると、

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

ただし、ファイル自体をロードして関数を実行するとエラーが発生します

| ?- [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

なぜこれが当てはまるのか、これを修正する方法はありますか?これは、ファイル内の他の述語でも発生します。

4

1 に答える 1

1

コードには 3 つの問題があります。

  1. の宣言には, today/3の締めくくりがありません)
  2. today/3エクスポートされません
  3. use_module/2は、2 番目の引数としてシンボルのリストを期待します。代わりに を使用しますimport sym from mod

utils.Pファイルを次のように定義した場合

:- import datime/1 from standard.
:- export today/3.
today(Y, M, D) :- datime(datime(Y, M, D, _, _, _)).

次のいずれかの方法で使用できます。

述語を直接インポートします。

| ?- import today/3 from utils.

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

Y = 2016
M = 5
D = 18

を使用して修飾名を使用する:

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

Y = 2016
M = 5
D = 18

モジュールを直接ロードする

| ?- [utils].
[utils loaded]

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

Y = 2016
M = 5
D = 18
于 2016-05-18T09:06:28.967 に答える