我正在寻找像Prolog中具有返回值的内置算术运算符(特别是在SWI-Prolog中)。例如。如果您运行A is (1+2) + (3+2).
,则会返回A = 8.
。
如何定义func
运算符来执行+
运算符之类的操作?
例如。 A is (2 func 3) func (4 func (2+1)).
。
答案 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'))