Max*_*axB 5 prolog logic-programming xsb
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 现在可用的更通用?
来自维基
\n\n\n尽管在语法上 HiLog 严格扩展了一阶逻辑,但 HiLog 可以嵌入到该逻辑中。
\n
任何 HiLog 术语都可以翻译为 Prolog 术语(HiLog:高阶逻辑编程基础 - Weidong Chen、Michael Kifer、David S.Warren - 1993)。所以从某种意义上来说,是的,它并不比 Prolog 更通用。
\n让我引用论文中的一些结论
\n\n\n首先,HiLog中的编程使更多的逻辑程序变得逻辑化。我们都告诫 Prolog 程序员使他们的程序尽可能纯净,并避免 Prolog\xe2\x80\x99s 非逻辑结构的罪恶。在 Prolog 中,谓词和函数符号的混合,特别是在谓词 call/1 中,是非逻辑的,而在 HiLog 中,它是完全逻辑的,并且是一等公民。因此,在 HiLog 中,程序员不需要避免使用 call/l,从而在编写纯逻辑程序的任务中具有更大的灵活性。
\n
\n\n其次,即使有人可能会说 HiLog 只是 Prolog 的语法变体,但在进行元编程时,语法很重要。\n由于在元编程中,语法决定了要操作的数据结构,因此更简单的语法意味着元编程- 程序可以更简单。
\n