【发布时间】:2016-07-20 20:55:47
【问题描述】:
我正在开发一个简单的 Web 服务,它将用户提供的事实添加到我的 Prolog 数据库中(使用 assert)。我认为最好将这些动态事实(“数据”)与我对这些事实(“代码”)进行操作的服务规则分开,因此将它们分成两个不同的模块。主要原因是我想定期将动态事实保存到磁盘,同时能够开发没有问题且独立于用户数据的代码。
我一直在使用assert(my_store:fact(...)) 将用户数据添加到my_store 模块,然后在代码模块中我开始编写规则,例如
:- module (my_code, [a_rule/1, ...]).
a_rule(Term) :-
my_store:fact(...), ...
看起来一切正常,但使用这种方法my_store 被硬编码在代码模块中,这有点令人担忧。例如,如果一段时间后我决定更改数据模块名称,或者我可能需要两个独立的数据模块,一个具有频繁持久性,另一个仅偶尔进行持久性,该怎么办?
谁能建议代码和数据组织的最佳实践是什么?也许代码和数据的分离违反“Prolog 方式”?有没有深入探讨这些问题的好书?
干杯, 杰克
【问题讨论】: