Prolog编程:结构映射、程序操作与调试技巧
结构映射与树转换
结构映射是将一个结构逐组件复制形成新结构的过程,通常在复制时会对每个组件进行轻微修改。例如,在将一个句子转换为另一个句子时,我们有时会精确复制原句中的单词,有时会使用修改后的单词。
以下是一个将 alter 的第一个参数映射到第二个参数的程序:
alter([], []).
alter([A|B], [C|D]):- change(A, C), alter(B, D).
为了更通用地进行映射操作,我们可以定义 maplist 谓词,使得 maplist(P, L, M) 目标通过将谓词 P 应用于列表 L 的每个元素来形成新列表 M 。假设 P 有两个参数,第一个参数是“输入”元素,第二个参数是要插入 M 的修改后元素:
maplist(_, [], []).
maplist(P, [X|L], [Y|M]) :-
Q =.. [P,X,Y], call(Q), maplist(P, L, M).
maplist 的定义包含边界条件(第一个子句)和一般递归情况(第二个子句)。第二个子句使用 =..
超级会员免费看
订阅专栏 解锁全文
3818

被折叠的 条评论
为什么被折叠?



