我执行Prolog的解释,我想包括一些内置的数学函数(SUM,产品等)。例如,我想能够使使用知识基础这样一个计算:实现算法的Prolog的
NetForce(F) :- Mass(M), Acceleration(A), Product(M, A, F)
Mass(10) :- []
Acceration(12) :- []
于是我应该能够作出查询,如?NetForce(X)
。我的问题是:在我的解释器中构建这样的功能的正确方法是什么?
特别是,我遇到的问题是,为了评估Sum
,Product
等,必须先评估它们的所有参数(即绑定到数字常量)。例如,虽然以上面的代码应该正确评价,对置换后的规则:
NetForce(F) :- Product(M, A, F), Mass(M), Acceleration(A)
不会,因为M
和A
未绑定时Product
项处理。我目前的做法是简单地重新排列这些术语,以便最后出现数学表达式。这在简单的情况下起作用,但看起来很诡异,而且我希望在多个数学术语或递归的情况下会出现问题。有更好的解决方案吗?
我会建议:使用现有的Prolog系统来构建您的扩展作为元解释器。 – false
请参阅http://stackoverflow.com/questions/14527682/implementing-prolog-in-c-or-c/14536068#14536068 – false
是的,我认为这是有道理的,但我不确定它是否会在我的项目的大背景。我会研究它。 – user1604015