这是我知识库中的元素,(完全是这样):
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'
答案 0 :(得分:1)
(首先,你所谓的“功能”应该被称为“谓词”)
如果我理解你的想法,你写了
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).
但是我理解你的意思可能是错的,所以请说如果它没有回答你的问题。