我想知道如何将Prolog中的统一和OO结合起来.我想在术语对象上实现多方法调度.
如果没有术语对象和简单术语,我会执行以下操作,并且可以从多参数索引中获益:
collide_with(asteroid(_), asteroid(_)) :- /* case 1 */
collide_with(asteroid(_), spaceship(_,_)) :- /* case 2 */
collide_with(spaceship(_,_), asteroid(_)) :- /* case 3 */
collide_with(spaceship(_,_), spaceship(_,_)) :- /* case 4 */
Run Code Online (Sandbox Code Playgroud)
但上面只给出了一个确切的类型匹配.
如果我想要一个子类类型匹配,我该怎么办(可能有更多的太空船子类,如excelsior,galaxy等......在情况2,3和4中也应该匹配).
我还可以使用统一和索引吗?
再见
PS:这个例子来自这里没有Prolog解决方案:https:
//en.wikipedia.org/wiki/Multiple_dispatch
如何定义用户无法查询的规则?我只希望程序本身通过另一个规则调用此规则.
例如:
rule1(): - rule2().
rule2(): - 1 <5.
?-规则1().
真正
?-rule2().
(我不知道答案是什么,我只是希望这个查询失败!)