自定义Prolog算术功能

时间:2010-11-14 21:49:26

标签: prolog operators user-defined-functions

我正在寻找像Prolog中具有返回值的内置算术运算符(特别是在SWI-Prolog中)。例如。如果您运行A is (1+2) + (3+2).,则会返回A = 8.

如何定义func运算符来执行+运算符之类的操作? 例如。 A is (2 func 3) func (4 func (2+1)).

2 个答案:

答案 0 :(得分:6)

为了将您的函数func内联为+运算符(以及许多其他运算符),您需要为func及其参数定义优先顺序。您可以使用op/3在SWI-PROLOG中实现此目的。

例如,指令(使用func/2的前一代码):

:- op(500,yfx,func).

要实现func/2,您可以为您的语言编写元解释器(即,您编写PROLOG程序,解析包含func的术语表达式并根据需要对其进行解释),或者func/2是严格算术的,您也可以使用arithmetic_function/1作为指令,如下所示:

:- arithmetic_function(func/2).

使用func/2的以下定义对此进行测试:

func(X, Y, Z) :- 
    Z is X + Y.

以你的榜样给出:

?- A is (2 func 3) func (4 func (2+1)).
A = 12.

答案 1 :(得分:2)

在手册中,arithmetic_function/1会将您的关系提升为is可以理解的内容,请参阅

http://www.swi-prolog.org/pldoc/doc_forobject=section(2,'4.26',swi('/doc/Manual/extendarith.html'))