【发布时间】:2010-11-07 18:21:44
【问题描述】:
因此,我们可以通过以下方式在 Prolog 中轻松找到一个原子并将其替换为另一个原子:
replace([],A,B,[]).
replace([H|T],A,B,[B|Result]) :-
H=A,
replace(T,A,B,Result),!.
replace([H|T],A,B,[H|Result]) :-
replace(T,A,B,Result).
我相信还有其他方法可以做到这一点。
但是,我想在计算中做一些更复杂的逻辑。您将如何做一些事情,例如用 (x,y) 替换逻辑语句中的 conj(x,y) 之类的连词?所以它就像 final 和 replace 但不是原子。所以我们可以有类似reduce(conj(conj(x,y),z)). 的东西,我想减少到((x,y),z)。
这是一个只有连词的简单示例,但这是我希望在连词的情况下发生的情况。如果有人感兴趣,这都是关于描述性逻辑和表格方法的。
当输入实际上不是列表时,我对如何进行查找和替换感到困惑;这是一个结构。如果不使用带有递归和列表的标准 [H|T] 技巧,我看不出如何解决这个问题。有人有什么想法吗?
非常感谢。
【问题讨论】:
-
为什么不在第一个 H=A 之后而不是在 replace/4 之后放置剪切?您的代码将运行得更快,因为 Prolog 系统随后可以检测到 replace/4 是确定性的。
标签: prolog