【发布时间】:2017-06-14 00:39:12
【问题描述】:
我正在努力实现这一目标:
给定OldList,如果项目满足目标(oldNew),则替换任何项目;如果不是,请不要更换该项目。
返回一个 NewList,其中替换的项目与 OldList 具有相同的结构(即相同的嵌套)。
对于特殊情况OldList = [a, b, c],我让它工作(见我的代码),但我想写一个泛化列表长度和嵌套列表的谓词,例如也适用于OldList = [a, [b, c, [d, e]]]。
提前致谢! /JC
oldNew(fruit, banana).
oldNew(car, ferrari).
replace(OldList, NewList):-
[X1, X2, X3] = OldList,
(oldNew(X1, Y1); Y1 = X1),
(oldNew(X2, Y2); Y2 = X2),
(oldNew(X3, Y3); Y3 = X3),
(oldNew(X1, Y1); oldNew(X2, Y2), oldNew(X3, Y3)),
NewList = [Y1, Y2, Y3].
编辑1:
让它适用于任意长度的列表;但我仍然不知道如何处理嵌套列表。
replace2(OldList, NewList):-
[H | T] = OldList,
oldNew(H, NewHead),
NewList = [NewHead | T].
replace2(OldList, NewList):-
[H | T] = OldList,
replace2(T, NewTail),
NewList = [H | NewTail].
【问题讨论】: