【发布时间】:2020-08-14 08:23:57
【问题描述】:
?- assertz(:- module(foo1, [f/1])).
true.
?- foo1:assertz(f(1)).
true.
?- foo1:f(1).
true.
?- foo2:f(1).
Correct to: "foo1:f(1)"? no
ERROR: Undefined procedure: foo2:f/1
ERROR: In:
ERROR: [8] foo2:f(1)
ERROR: [7] <user>
对我来说很有意义。但是后来(从头开始)....
?- assertz(:- module(foo1, [f/1])).
true.
?- assertz(f(1)).
true.
?- foo1:f(1).
true.
?- foo2:f(1).
true. # Wait, what? foo2 doesn't appear in my program. Should fail?
?- frobnoz:f(1).
true. # Also odd!
然后……
?- foo2:assertz(f(1)).
true.
?- foo2:f(1).
true.
?- frobnoz:f(1).
ERROR: Undefined procedure: frobnoz:f/1
当我没有提到foo2 时,f 如何被添加到foo2。
为什么frobnoz:f在第二个例子中成功,而在第三个例子中失败了?
什么是模块?我以为它们是命名空间,但现在很困惑。
【问题讨论】:
标签: module swi-prolog meta-predicate