recursion - 替换列表中每个出现的元素,仅当它跟在指定元素之后时

标签 recursion functional-programming scheme lisp

我正在尝试编写一个函数 replaceAfter(A X Y L)​​,它仅在 X 出现在 A 之后时才将 L 中出现的所有 X 替换为 Y。

例子:

replaceAfter d m t '(f d s d m p m h d m u m) -> '(f d s d t p m h m t u m)

这是我到目前为止的想法:

(define replaceAfter
    (lambda(A X Y L)
        (cond
            ( (null? L)          '() )
            ( (if (and (equal? (car L) A) (equal? (car (cdr L)) X) ) (cons (cons (car L) Y) (replaceAfter A X Y (cdr (cdr L))))) )
            (#t (cons (car L) (relaceAfter A X Y (cdr L))))
        )
    )
)

最佳答案

(define replace-after
  (lambda (d m t lst)
    (let loop ((todo lst)
               (done '())
               (replace #f))
      (if (null? todo)
          (reverse done)
          (let ((item (car todo)))
            (loop (cdr todo)
                  (cons (if (and replace (eq? m item)) t item) done)
                  (eq? item d)))))))

关于recursion - 替换列表中每个出现的元素,仅当它跟在指定元素之后时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36337056/

相关文章:

list - 将元素 append 到方案中的现有列表

scheme - DrRacket 中的随机函数

javascript - 递归而不显式设置变量javascript

php - 获取类别的所有项目及其子项

validation - 带TextFormField的onLeave-Flutter/Dart

programming-languages - 可逆计算平台

recursion - 生成LISP中n个给定变量的所有可能的true或false组合的列表

algorithm - 递归关系 : Writing a recurrence relation

functional-programming - 在 Scheme 中定义新的数据类型

scheme - 表格方案中的错误