自定义 Prolog 算术函数
Posted
技术标签:
【中文标题】自定义 Prolog 算术函数【英文标题】:Custom Prolog arithmetic function 【发布时间】:2010-11-14 21:49:25 【问题描述】:我正在寻找类似内置算术运算符的东西,它在 Prolog(特别是在 SWI-Prolog)中具有返回值。例如。如果你运行A is (1+2) + (3+2).
,它会返回A = 8.
。
如何定义func
运算符来执行+
运算符之类的操作?
例如。 A is (2 func 3) func (4 func (2+1)).
.
【问题讨论】:
【参考方案1】:为了将您的函数func
与+
运算符(以及许多其他运算符一起)内联,您需要为func
及其参数定义优先顺序。您可以在 SWI-PROLOG 中使用op/3
实现此目的。
例如指令(前面的代码使用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.
【讨论】:
现在 SWI Prolog 的手册中说该指令已被弃用,如何更新解决方案?发送 不确定它为什么被弃用,如果你真的需要知道,最好询问Jan Wielemaker。我的理解是它仍然有效,即使它已被弃用......我错了吗?【参考方案2】:在手册中,arithmetic_function/1
会将您的关系提升为is
可以理解的内容,请参阅
http://www.swi-prolog.org/pldoc/doc_forobject=section(2,'4.26',swi('/doc/Manual/extendarith.html'))
【讨论】:
以上是关于自定义 Prolog 算术函数的主要内容,如果未能解决你的问题,请参考以下文章