far*_*zad 5 operators prolog 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)).
.
为了将函数func
内联作为+
运算符(以及许多其他函数),您需要为其func
及其参数定义优先顺序.您可以在SWI-PROLOG中实现此目的op/3
.
例如,指令(使用前面的代码func/2
):
:- op(500,yfx,func).
Run Code Online (Sandbox Code Playgroud)
要实现func/2
,您可以为您的语言编写一个元解释器(即,您编写一个PROLOG程序来解析术语表达式,包括func
并根据需要解释它们),或者如果func/2
是严格的算术,您也可以使用arithmetic_function/1作为指令如下:
:- arithmetic_function(func/2).
Run Code Online (Sandbox Code Playgroud)
使用以下定义对此进行测试func/2
:
func(X, Y, Z) :-
Z is X + Y.
Run Code Online (Sandbox Code Playgroud)
给你的例子:
?- A is (2 func 3) func (4 func (2+1)).
A = 12.
Run Code Online (Sandbox Code Playgroud)