【问题标题】:What do these mean in prolog?这些在序言中是什么意思?
【发布时间】:2016-12-04 19:05:24
【问题描述】:

首先,当我阅读 Prolog 上的不同谓词时,例如 http_server,它是这样写的:http_server(:Goal, +Options) :+ 在这里是什么意思?有时还会写?
其次,有时我会看到像_Request 这样在它们之前用下划线声明的变量,即使没有另一个Request,这是为什么呢?

【问题讨论】:

    标签: prolog swi-prolog


    【解决方案1】:

    +-: 等符号被称为模式声明。它们描述了谓词参数的预期实例化,即是否希望您使用未绑定变量、实例化术语等来调用谓词。这些都不是完全标准化的;这里是 SWI-Prolog 约定的描述:http://www.swi-prolog.org/pldoc/man?section=modes

    作为第一个近似值,+ 参数是谓词的输入,您应该提供一个基本术语。 - 参数是谓词的输出,谓词将尝试将其与术语统一。 ? 术语可以在调用时部分实例化,谓词可以进一步实例化它。 : 参数是一个元参数,即它是一个由谓词调用的目标(例如 setof/3)。

    http_server(:Goal, +Options) 的示例中,您应该使用绑定到目标的第一个参数调用此谓词,可能是谓词名称。第二个参数必须实例化,大概是一个列表,其格式在文档中进一步描述。如果你像这样调用这个谓词,例如,如果你传递一个未绑定的变量作为第二个参数,你可能会得到意外的行为或实例化错误。

    至于您的第二个问题(最好分开),以下划线开头的变量称为匿名变量。除了_ 本身,每个这样的变量在每个子句中只能出现一次,它可能出现多次并且每次出现时引用单独的变量。

    Prolog 系统通常会针对仅出现一次的非匿名变量发出“单例变量”警告,因为这些变量可能是拼写错误或程序员忘记了什么的迹象。您使用匿名变量来表达“这里肯定有一些东西(例如,谓词参数),但我不在乎它是什么”的概念。在您的示例中,大概您调用了一个具有“请求”参数的谓词,但在您的特定用例中,您并不关心请求。

    【讨论】:

    • 谢谢,很好的解释。还有一件事我不明白,为什么叫它_Request 而不仅仅是_?只是为了清楚起见,这是一个请求吗?
    • 是的,只是为了让变量名更有表现力。
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2013-05-09
    • 2013-08-20
    • 2014-12-24
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多