HiLog 是否添加了 Prolog 中“调用”无法完成的任何内容?

Max*_*axB 5 prolog logic-programming xsb

Prolog 的维基百科文章指出:

Prolog 中的高阶编程风格在 HiLog 和 ?Prolog 中首创。

HiLog的动机包括其实现高阶谓词的能力,例如maplist

maplist(F)([],[]).
maplist(F)([X|Xs],[Y|Ys]) <- F(X,Y), maplist(F)(Xs,Ys).
Run Code Online (Sandbox Code Playgroud)

描述 HiLog 的论文假设 Prolog 只有call/1,没有call/3

但是,由于 Prolog(现在)有call/3,maplist可以很容易地在其中实现:

maplist(_, [], []).
maplist(P, [X|Xs], [Y|Ys]) :- call(P, X, Y), maplist(P, Xs, Ys).
Run Code Online (Sandbox Code Playgroud)

HiLog 是否主要具有历史意义,或者它的“高阶”逻辑是否比 Prolog 现在可用的更通用?

raj*_*kar 4

来自维基

\n
\n

尽管在语法上 HiLog 严格扩展了一阶逻辑,但 HiLog 可以嵌入到该逻辑中。

\n
\n

任何 HiLog 术语都可以翻译为 Prolog 术语(HiLog:高阶逻辑编程基础 - Weidong Chen、Michael Kifer、David S.Warren - 1993)。所以从某种意义上来说,是的,它并不比 Prolog 更通用。

\n

让我引用论文中的一些结论

\n
\n

首先,HiLog中的编程使更多的逻辑程序变得逻辑化。我们都告诫 Prolog 程序员使他们的程序尽可能纯净,并避免 Prolog\xe2\x80\x99s 非逻辑结构的罪恶。在 Prolog 中,谓词和函数符号的混合,特别是在谓词 call/1 中,是非逻辑的,而在 HiLog 中,它是完全逻辑的,并且是一等公民。因此,在 HiLog 中,程序员不需要避免使用 call/l,从而在编写纯逻辑程序的任务中具有更大的灵活性。

\n
\n
\n

其次,即使有人可能会说 HiLog 只是 Prolog 的语法变体,但在进行元编程时,语法很重要。\n由于在元编程中,语法决定了要操作的数据结构,因此更简单的语法意味着元编程- 程序可以更简单。

\n
\n