2010-11-14 91 views
5

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

如何定义func运算符来做类似+运算符的运算符?
例如A is (2 func 3) func (4 func (2+1)).

回答

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. 
+0

既然在SWI Prolog的手册中它说这个指令已被弃用,那么如何更新解决方案呢? Tx – 2016-05-06 13:05:30

+0

不确定为什么它被弃用,如果你真的需要知道,最好问问[Jan Wielemaker](https://github.com/JanWielemaker)。我的理解是它仍然有效,尽管它已被废弃......我错了吗? – sharky 2016-05-07 05:50:42

2

这是手册中,arithmetic_function/1将提高你的关系到一些东西,is可以理解,看到

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