我正在编写一条规则,以以下形式搜索事实数据库:
overground(Station1, Station2, DurationOfTravel).
并允许您搜索花费相同时间的所有旅程。
我写了以下两个规则:
timesearch(Duration) :-
overground(Station1, Station2, Duration),
print([Station1, Station2]).
timesearch(Duration, [Station1,Station2]) :-
overground(Station1, Station2, Duration).
基本上做同样的事情。我不确定哪种是最佳做法?还是两个同样好的解决方案?
最佳答案
他们本质上并没有做同样的事情。它们包含相同的“业务”逻辑,但第一个混合了表示逻辑(输出代码)。程序设计的一般原则是应将业务逻辑和表示分开,因此,选择第二个选项,并将打印内容放在某种main
谓词中。
特别是,在此示例中,您不希望在timesearch
谓词中进行打印;如果您有一天决定要一种更复杂的算法来确定一条超过两跳的路由的持续时间,该怎么办?您可以根据timesearch
的第二个定义来实现这种算法,但是不能根据第一个定义来实现。
(这与Prolog无关,而与良好的软件设计工艺息息相关。)
关于prolog - Prolog中哪个更常见的做法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8743740/