4 prolog
早上好,我坚持在OsmAnd发现的Prolog程序规则.这是一个简化版本:
dest(D) -- ['dest.ogg'|Ds] :- name(D, Ds).
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚--它是什么意思,因为这是我第一次在Prolog程序中看到这样的构造.它看起来像一个替代如下:" dest(D)是通过更换所获得的列表Ds中['dest.ogg'|Ds],如果name(D, Ds)".此外,我试图在几个Prolog手册(例如SWI-Prolog)中寻找" - ",但我找不到任何与此类构造相关的内容.
有什么建议吗?它是一个自定义构造?
据我所知,该--部分并非针对SWI.这是一个运营商.可能在文件中你会看到:
:- op(900, xfx,--).
Run Code Online (Sandbox Code Playgroud)
(或类似的东西)
所以这里定义了运算符(--)/2.接下来,您可以使用带有中缀表示法(--)/3 的谓词(或函子).事实上:
dest(D) -- ['dest.ogg'|Ds] :- name(D, Ds).
Run Code Online (Sandbox Code Playgroud)
简称:
--(dest(D),['dest.ogg'|Ds]) :- name(D, Ds).
Run Code Online (Sandbox Code Playgroud)
这是一个简单的(很简单,它有一个奇怪的名称)谓词定义.但是通过使用优先级900(至少在此答案中)定义运算符,以及模式,xfx您可以在两个术语之间将其用作运算符.
在Prolog, ,is,+,-,*等也都是运营商.如果你写X is 2+2,你实际上写了is(X,+(2,2)).所以这里+被一个仿函数所取代,并且is是一个谓词.因此,两者都没有什么特别之处is/2:它只是一个谓词,它解释了一个描述应该被计算的表达式的语法树的仿函数.
这篇关于SWI Prolog手册操作员的条目更深入地解释了操作员.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |