19、Prolog编程:结构映射、程序操作与调试技巧

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 的定义包含边界条件(第一个子句)和一般递归情况(第二个子句)。第二个子句使用 =..

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值