这些在序言中意味着什么?
What do these mean in prolog?
首先,当我阅读 Prolog 上的不同谓词时,例如 http_server
,它是这样写的:http_server(:Goal, +Options)
:
和 +
在这里是什么意思?有时?
也写成
其次,有时我会看到变量在它们之前用下划线声明,例如 _Request
,即使没有其他 Request
,这是为什么呢?
+
、-
、:
等印记被称为模式声明。它们描述了谓词参数的预期实例化,即是否期望您使用未绑定变量、实例化项等调用谓词。这些都没有完全标准化;这是 SWI-Prolog 约定的描述:http://www.swi-prolog.org/pldoc/man?section=modes
作为第一个近似值,+
参数是谓词的 输入 ,您应该提供基本术语。 -
参数是谓词的 输出 ,谓词将尝试将其与术语统一。 ?
项可以在调用时部分实例化,谓词可以进一步实例化它。 :
参数是元参数,即它是谓词调用的目标(例如 setof/3
)。
在 http_server(:Goal, +Options)
的示例中,您应该使用绑定到目标的第一个参数调用此谓词,可能是谓词名称。第二个参数必须被实例化,大概是一个列表,其格式在文档中有进一步描述。如果您 not 像这样调用此谓词,例如,如果您将未绑定变量作为第二个参数传递,则可能会出现意外行为或实例化错误。
关于你的第二个问题(最好分开),以下划线开头的变量称为匿名变量。每个这样的变量在每个子句中只能出现一次,除了 _
本身,它可能会出现多次并在每次出现时引用不同的变量。
Prolog 系统通常会针对仅出现一次的非匿名变量发出 "singleton variable" 警告,因为这些变量可能是拼写错误或程序员忘记某些事情的标志。您使用匿名变量来表达 "there must be something here (e.g., a predicate argument), but I don't care what it is" 的概念。在您的示例中,大概您调用了一个具有 "request" 参数的谓词,但在您的特定用例中您不关心请求。
首先,当我阅读 Prolog 上的不同谓词时,例如 http_server
,它是这样写的:http_server(:Goal, +Options)
:
和 +
在这里是什么意思?有时?
也写成
其次,有时我会看到变量在它们之前用下划线声明,例如 _Request
,即使没有其他 Request
,这是为什么呢?
+
、-
、:
等印记被称为模式声明。它们描述了谓词参数的预期实例化,即是否期望您使用未绑定变量、实例化项等调用谓词。这些都没有完全标准化;这是 SWI-Prolog 约定的描述:http://www.swi-prolog.org/pldoc/man?section=modes
作为第一个近似值,+
参数是谓词的 输入 ,您应该提供基本术语。 -
参数是谓词的 输出 ,谓词将尝试将其与术语统一。 ?
项可以在调用时部分实例化,谓词可以进一步实例化它。 :
参数是元参数,即它是谓词调用的目标(例如 setof/3
)。
在 http_server(:Goal, +Options)
的示例中,您应该使用绑定到目标的第一个参数调用此谓词,可能是谓词名称。第二个参数必须被实例化,大概是一个列表,其格式在文档中有进一步描述。如果您 not 像这样调用此谓词,例如,如果您将未绑定变量作为第二个参数传递,则可能会出现意外行为或实例化错误。
关于你的第二个问题(最好分开),以下划线开头的变量称为匿名变量。每个这样的变量在每个子句中只能出现一次,除了 _
本身,它可能会出现多次并在每次出现时引用不同的变量。
Prolog 系统通常会针对仅出现一次的非匿名变量发出 "singleton variable" 警告,因为这些变量可能是拼写错误或程序员忘记某些事情的标志。您使用匿名变量来表达 "there must be something here (e.g., a predicate argument), but I don't care what it is" 的概念。在您的示例中,大概您调用了一个具有 "request" 参数的谓词,但在您的特定用例中您不关心请求。