gpt4 book ai didi

Prolog 和 headless 含义

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

在 Prolog 代码中,可以使用“ headless ”Horn 子句将指令传递给编译器,这些子句与指向左侧的物质蕴涵 ':-' (⇐) 的左侧没有头部关系。例如,导入模块或声明 Unit Test Code :

:- begin_tests(lists).
:- use_module(library(lists)).

test(reverse) :- reverse([a,b], [b,a]).

:- end_tests(lists).

显然, headless Horn 子句在源文件中的位置很重要。

号角子句
HEAD :- BODY1, BODY2, .... , BODYN

被理解为等价于逻辑表达式

body_1 ∧ body_2 ∧ .... ∧ body_n ⇒ 头

或者,这被理解为经典逻辑,使用 bool 代数的等价规则:

¬body_1 ∨ ¬body_2 ∨ .... ∨ ¬body_n ∨ 头

在 headless 子句的情况下,我们因此断言否定:
:- begin_tests(lists).

原则上意味着我们断言 begin_tests(lists)不是真的。

(实际上在 Answer Set Programming 中,上述子句被用作“矛盾”来拒绝生成的解决方案: :- move(D,P,T), blocked(D-1,P,T). 表示“move(D,P,T) ∧blocked(D-1,P, T)",相应地拒绝任何潜在的解决方案。)

我理解能够指定代码分隔符、源注释、文件元信息和其他编译器指令的实际需求。但是为什么指令使用 :- .使用与逻辑语法完全无关的其他符号会不会更干净,例如 #传统上由 C 宏使用。

最佳答案

在 SWI-Prolog 中,有一个干净的替代方案:

你可以写:

?- 目标。

此语法与 完全类似。查询 ,如果你仔细观察,它的格式总是 ?- Goal ,即使您没有明确输入 ?- .

关于Prolog 和 headless 含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41175852/

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