【发布时间】:2014-12-21 18:31:38
【问题描述】:
我正在尝试在另一个文件中撤回和断言一个事实。一个 (fruit1.pl) 包含几个事实,另一个 (fruit.pl) 包含一个谓词 start,它指定另一个谓词 insert_fruit 将更新哪个事实:
fruit1.pl
fruit(apple, [[2, yellow], [1, brown]]).
fruit(orange, [[3, orange], [2, orange]]).
fruit.pl
:- dynamic fruit/2.
start :-
consult('fruit1.pl'),
File = 'fruit1.pl',
Name = apple,
Price = 2,
Color = red,
insert_fruit(File, Name, Price, Color).
insert_fruit(File, Name, Price, Color) :-
open(File, update, Stream),
retract(fruit(Name, Information)),
assert(fruit(Name, [[Price, Color]|Information])),
close(Stream).
但是insert_fruit 没有按预期工作,因为我认为它需要包含 Stream 才能修改其他文件,尽管我不知道如何(retract(Stream, ...) 不起作用)。是否有一些我可以让撤回和断言谓词在另一个文件中起作用?
【问题讨论】:
-
你正在尝试的东西不会像这样工作。
assert和retract操作谓词“数据库”,而不是当前打开的文件。您之前曾问过类似的问题,并得到了评论和答案;阅读它们。 -
你见过this question吗?我在那里给出了答案。还有,鲍里斯说的。
标签: prolog prolog-directive-dynamic