prolog - Prolog - 如何替换列表中的某些单词
问题描述
我有以下序言谓词:
processWords([hello, my, name, is, Simon], Result).
我需要知道如何获得:
Result = [bye, my, name, is, Ben]
我将如何递归列表并返回一个字符串,使用 Prolog 将“hello”替换为“bye”,将“Simon”替换为“Ben”?
非常感谢任何帮助,谢谢!
解决方案
首先,这是无法做到的,因为您的示例中的“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
推荐阅读
- windows - 参考格式无效
- node.js - 使用firebase Nodejs客户端时如何处理Auth变量机制
- amazon-web-services - 将 AWS ALB 流量从一个账户发送到另一个账户
- python - 使用 CountVectorizer 一次对两个 pandas 列进行矢量化
- xslt - XSLT:system.description 显示为空
- requirejs - 适用于浏览器 JavaScript 的 AWS 开发工具包的正确来源是什么?
- java - 用其他多个字符替换Java中的多个字符?
- c# - kafka中实现HTTP同步请求响应
- javascript - 调整大小时出现 Jquery Datatables 问题
- javascript - Vue.js 和 Express-gateway CORS 请求