Prolog 中的高阶编程风格在 HiLog 和 λProlog 中首创。
HiLog的动机包括它实现高阶谓词的能力,例如maplist
:
maplist(F)([],[]).
maplist(F)([X|Xs],[Y|Ys]) <- F(X,Y), maplist(F)(Xs,Ys).
描述 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).
HiLog 是否主要具有历史意义,还是它的“高阶”逻辑比现在 Prolog 中可用的逻辑更普遍?