自定义Prolog算术函数
我正在寻找类似内置算术运算符的东西,它在 Prolog 中(特别是在 SWI-Prolog 中)有返回值。例如,如果运行 A is (1+2) + (3+2).
,它将返回 A = 8.
。
如何定义 func
运算符来执行类似 +
运算符的操作?
例如,A 是 (2 func 3) func (4 func (2+1))。
。
I'm looking for something like built-in arithmetic operators that has a return value in Prolog (specifically in SWI-Prolog). E.g. if you run A is (1+2) + (3+2).
, it returns A = 8.
.
How can I define func
operator to do something like +
operator?
E.g. A is (2 func 3) func (4 func (2+1)).
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为了将函数
func
定位为内联,就像+
运算符(以及许多其他运算符)一样,您需要为func
定义优先顺序code> 及其参数。您可以在 SWI-PROLOG 中使用op/3
。例如,指令(使用
func/2
的前面的代码):要实现
func/2
,您可以为您的语言编写一个元解释器(即,您编写一个 PROLOG 程序,该程序解析包括func
在内的术语表达式并根据您的意愿解释它们),或者如果func/2
是严格的算术,则可以使用 arithmetic_function/1 也作为指令,如下所示:使用以下定义来测试 func/ 2:
以您的示例为例:
In order to situate your function
func
inline just as the+
operator (along with many others), you'll need to define a precedence order forfunc
and it's arguments. You can achieve this in SWI-PROLOG withop/3
.For example, the directive (preceding code where
func/2
is used):To implement
func/2
, you can either write a meta-interpreter for your language (i.e., you write a PROLOG program which parses term expressions includingfunc
and interprets them as you wish), or iffunc/2
is strictly arithmetic, you can use arithmetic_function/1 also as a directive, as follows:Testing this with the following definition for
func/2
:Gives, with your example:
它在手册中,
arithmetic_function/1
会将您的关系提升为is
可以理解的东西,请参阅It is in the manual,
arithmetic_function/1
will raise your relation into something whichis
can understand, see