这是我知识库中的元素,(完全像这样):
DataBase = [book('A',[author('B','C')],154,12,6,[publishedYear(1990)]),
book('Z',[author('Y','X')],155,1,62,[publishedYear(2009)])].
它与我们的其他谓词位于同一个 pl 文件中。我如何能够访问它?例如,如果我想做:
?- write(DataBase).
它给出了一个错误,因为它显然无法访问变量。
编辑:我得到的错误是它是一个单例变量:
Singleton variables: [DB]
和:
No permission to modify static_procedure `(=)/2'
(首先,你所说的"函数"应该叫"谓词")
如果我正确理解你认为你做了什么,你写了
Var = Something.
然后尝试在您的谓词中"访问"该变量。您应该注意,逻辑编程中的"变量"与其他编程范式中的"变量"不同。
例如,在 C 中,变量是一个可以放置以后可以更改的信息的地方。在逻辑编程中,变量是要统一的,它是数学意义上的变量。
您还应该注意,变量是隐式通用量化的,所以当你写
predicate(X,Y).
你实际上是在写
forall X, forall Y, predicate(X,Y).
这意味着在该谓词之外,如果您再次使用字符串"X"来命名变量,它就不再是同一个变量。含义,在以下
pred1(X).
pred2(X).
这些不是同一个变量。
例如,您可以做的是实现您似乎要做的事情:
database([book('A',[author('B','C')],154,12,6,[publishedYear(1990)]),
book('Z',[author('Y','X')],155,1,62,[publishedYear(2009)])]).
而且,如果您想在谓词pred
中使用它:
pred :- database(DB), do_this_with_it(DB).
但我可能理解你的意思是错误的,所以如果它没有回答你的问题,请说出来。