首页 > 解决方案 > Prolog - 如何替换列表中的某些单词

问题描述

我有以下序言谓词:

processWords([hello, my, name, is, Simon], Result).

我需要知道如何获得:

Result = [bye, my, name, is, Ben]

我将如何递归列表并返回一个字符串,使用 Prolog 将“hello”替换为“bye”,将“Simon”替换为“Ben”?

非常感谢任何帮助,谢谢!

标签: prolog

解决方案


首先,这是无法做到的,因为您的示例中的“Simon”和“Ben”是变量。但是假设你对“simon”和“ben”很好,这是一个答案:

processWords([], []).

processWords([H|T], [H2|T2]) :-
    translate(H, H2),
    processWords(T, T2).

translate(hello, bye):-!.
translate(simon, ben):-!.
translate(X, X). % catch-all clause for all words not to be translated

或者,您可以使用maplist/3

processWords(L,L2):-maplist(translate, L, L2).

translate(hello, bye):- !.
translate(simon, ben):- !.
translate(X, X). % catch-all clause for all words not to be translated

推荐阅读