【问题标题】:Custom Prolog arithmetic function自定义 Prolog 算术函数
【发布时间】: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))..

【问题讨论】:

    标签: prolog operators user-defined-functions


    【解决方案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'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多