replace - 子字符串的基本 LISP 递归替换
问题描述
我正在尝试使用mapcar
递归函数中的基本 LISP 命令(例如 no )用“X”替换列表中给定字符串的任何出现。
(defun removetext (symbol list replaced)
(if (not list) ; if initial list has been exhausted, return replaced list
replaced
(progn
(if (eql (car list) symbol) ; otherwise, if first element of list = symbol, replace with "X"
(removetext symbol (cdr list) (cons "X" replaced))
(removetext symbol (cdr list) (cons (car list) replaced)) ; otherwise keep it
)
(format t "~D" replaced)
)
)
)
如果我用(removetext "E" '(A B C D E F F E) "")
.
这将返回NIL
并且打印输出看起来像(F F E D C B A . )(F E D C B A . )(E D C B A . )(D C B A . )(C B A . )(B A . )(A . )
.
我希望它返回(A B C D X F F X)
。
解决方案
(defun removetext (symbol list replaced)
(if (null list)
(reverse replaced)
(if (eql (car list) symbol)
(removetext symbol (cdr list) (cons 'x replaced))
(removetext symbol (cdr list) (cons (car list) replaced)))))
例子:
CL-USER > (removetext 'E '(A B C D E F F E) ())
(A B C D X F F X)
推荐阅读
- javascript - 在发射完成后而不是在发射之前更改 IF 语句中的值
- react-native - this.props.navigation.navigate 不导航到其他屏幕
- python - pandas,查找并保持连续行 - 创建面板数据
- python - (Tkinter)试图在循环中更新进度条值但程序崩溃?
- java - 如何在spring boot中使用像devtools这样的intellij自动构建和刷新spring mvc项目?
- c - `close()` 是否刷新缓冲的输出数据?
- python - 如何使用 PIL 将通道图像合并为一张 RGB 图像?
- node.js - 如何使用 ejs 视图引擎有条件地显示数据
- c++ - VS2015预处理器定义带点
- charts - How to make Google Line Chart circle have border?