我正在寻找像Prolog中具有返回值的内置算术运算符(特别是在SWI-Prolog中)。例如。如果您运行A is (1+2) + (3+2).
,则返回A = 8.
。自定义Prolog算术函数
如何定义func
运算符来做类似+
运算符的运算符?
例如A is (2 func 3) func (4 func (2+1)).
。
我正在寻找像Prolog中具有返回值的内置算术运算符(特别是在SWI-Prolog中)。例如。如果您运行A is (1+2) + (3+2).
,则返回A = 8.
。自定义Prolog算术函数
如何定义func
运算符来做类似+
运算符的运算符?
例如A is (2 func 3) func (4 func (2+1)).
。
为了像+
运算符(以及其他许多运算符)一样内联函数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.
这是手册中,arithmetic_function/1
将提高你的关系到一些东西,is
可以理解,看到
http://www.swi-prolog.org/pldoc/doc_forobject=section(2,'4.26',swi('/doc/Manual/extendarith.html'))
既然在SWI Prolog的手册中它说这个指令已被弃用,那么如何更新解决方案呢? Tx – 2016-05-06 13:05:30
不确定为什么它被弃用,如果你真的需要知道,最好问问[Jan Wielemaker](https://github.com/JanWielemaker)。我的理解是它仍然有效,尽管它已被废弃......我错了吗? – sharky 2016-05-07 05:50:42