gpt4 book ai didi

prolog - prolog '--' 构造的行为?

转载 作者:行者123 更新时间:2023-12-05 00:15:30 27 4
gpt4 key购买 nike

早上好,
我被困在 OsmAnd 中发现的 Prolog 程序的规则上。
这是一个简化版本:

dest(D) -- ['dest.ogg'|Ds] :- name(D, Ds).

我不明白 -- 是什么意思因为这是我第一次在 Prolog 程序中看到这样的结构。它看起来像一个替换内容,如下所示:“ dest(D) 是通过替换 Ds 中的 ['dest.ogg'|Ds] 获得的列表 | if name(D, Ds) ”。
另外,我试图在几个 Prolog 手册(例如 SWI-Prolog)中寻找“--”,但我找不到与这种结构相关的任何内容。

有什么建议吗?它是自定义构造吗?

最佳答案

据我所知,--部分是 不特定于 SWI .这是一个 运算符(operator) .可能在文件中你会在某处看到:

:- op(900, xfx,--).

(或类似的东西)

所以这里 运算符(operator) (--)/2已定义 .接下来你可以使用 (--)/3 作为谓词(或仿函数)用中缀表示法。所以实际上:
dest(D) -- ['dest.ogg'|Ds] :- name(D, Ds).

简称:
--(dest(D),['dest.ogg'|Ds]) :- name(D, Ds).

这是一个简单的(很简单,它有一个奇怪的名字)谓词定义。但是通过定义优先级为 900 的运算符(至少在这个答案中)和模式 xfx您可以在两个术语之间使用它作为运算符。

在序言中, is , + , - , *等也是运算符。如果你写 X is 2+2 ,你居然写了 is(X,+(2,2)) .所以这里 +被仿函数取代, is是谓词。因此, is/2 没有什么特别之处。要么:它只是一个谓词,它解释了一个仿函数,该仿函数描述了应评估的表达式的语法树。

This entry on Operators SWI Prolog 手册的 部分更深入地解释了运算符。

关于prolog - prolog '--' 构造的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44497735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com