.pl文件中确实有一些“数据库”:
exotic(1, 1).
exotic(2, 1).
exotic(3, 1).
exotic(4, 1).
exotic(5, 0).
exotic(6, 0).
我正在交互式运行(加载文件后从终端运行):
findall(X, exotic(X,1), L).
它可以正常工作,L可以按预期填充[1,2,3,4]。
但是当我将这个 findall 放入文件中并且正在运行文件时,出现了错误:“没有权限修改静态过程'findall / 3'”。
是什么原因造成的,以及如何将其放置在文件中以访问列表L?
答案 0 :(得分:0)
如果要从源文件进行查询,则标准解决方案是使用initialization/1
伪指令。例如:
:- initialization((
findall(X, exotic(X,1), L),
write(L), nl
)).
您不能简单地在源文件中写子句,例如:
findall(X, exotic(X,1), L).
这意味着(尝试)重新定义标准的内置谓词,大多数Prolog系统不允许这样做,因此会出现错误。