List 将元素替换为列表方案

List 将元素替换为列表方案,list,scheme,racket,List,Scheme,Racket,我需要用Scheme中的另一个元素替换列表中的一个元素,但问题是需要替换的列表可以嵌套 例如,如果我有列表”(1(2 3 4 5)(6 7))并且我需要用9替换5,那么我的输出应该是”(1(2 3 4 9)(6 7)) 你能帮我解决这个问题吗?解决这类问题有一个基本策略: 首先,求出一个简单的列表。i、 例如,编写函数,使其在输入列表没有子列表的情况下工作 然后,添加一个条件,以便如果要检查的元素是一个列表,则使用该列表递归到函数中 以下是一些骨架代码: (define (replace lst

我需要用Scheme中的另一个元素替换列表中的一个元素,但问题是需要替换的列表可以嵌套

例如,如果我有列表
”(1(2 3 4 5)(6 7))
并且我需要用9替换5,那么我的输出应该是
”(1(2 3 4 9)(6 7))


你能帮我解决这个问题吗?

解决这类问题有一个基本策略:

  • 首先,求出一个简单的列表。i、 例如,编写函数,使其在输入列表没有子列表的情况下工作
  • 然后,添加一个条件,以便如果要检查的元素是一个列表,则使用该列表递归到函数中
  • 以下是一些骨架代码:

    (define (replace lst from to)
      (cond ((null? lst) '())                ;; end of input
            ((list? (car lst)) <???>)        ;; encountered a sublist
            ((equal? (car lst) from) <???>)  ;; found the element we're replacing
            (else <???>)))                   ;; everything else
    
    (定义(将lst从替换为)
    (cond((null?lst);;输入结束
    ((列表?(汽车lst));;遇到子列表
    ((相等的?(汽车lst)从));;找到了我们要替换的元素
    (其他);;;其他一切
    

    请注意,第二个
    cond
    子句
    (list?(car lst))
    是支持子列表的版本中唯一新增的内容。

    解决此类问题有一个基本策略:

  • 首先,求出一个简单的列表。i、 例如,编写函数,使其在输入列表没有子列表的情况下工作
  • 然后,添加一个条件,以便如果要检查的元素是一个列表,则使用该列表递归到函数中
  • 以下是一些骨架代码:

    (define (replace lst from to)
      (cond ((null? lst) '())                ;; end of input
            ((list? (car lst)) <???>)        ;; encountered a sublist
            ((equal? (car lst) from) <???>)  ;; found the element we're replacing
            (else <???>)))                   ;; everything else
    
    (定义(将lst从替换为)
    (cond((null?lst);;输入结束
    ((列表?(汽车lst));;遇到子列表
    ((相等的?(汽车lst)从));;找到了我们要替换的元素
    (其他);;;其他一切
    
    请注意,第二个
    cond
    子句
    (list?(car lst))
    是支持子列表的版本中唯一新增的功能。

    下面是一个函数:

    (define (replace L new old)
       (cond ;;((null? L) L)
             ((list? L)
              (map
                  (lambda (lst) (replace lst new old))
                  L))
             (else
                  (if (equal? L old)
                       new
                       L))))
    
    使用示例:

    > (replace '(1 (1 2 3 4 (5 6 3) 3 4)) 7 3)
    '(1 (1 2 7 4 (5 6 7) 7 4))
    
    > (replace '() 7 3)
    '()
    
    > (replace '(1 (1 2 3 4) 3 4) 7 3)
    '(1 (1 2 7 4) 7 4)
    
    或:

    例如:

    (替换’(1(12 3 4(5 6 3)3 4))7 3)->’(1(12 7 4(5 6 7)7 4))

    这里有一个函数:

    (define (replace L new old)
       (cond ;;((null? L) L)
             ((list? L)
              (map
                  (lambda (lst) (replace lst new old))
                  L))
             (else
                  (if (equal? L old)
                       new
                       L))))
    
    使用示例:

    > (replace '(1 (1 2 3 4 (5 6 3) 3 4)) 7 3)
    '(1 (1 2 7 4 (5 6 7) 7 4))
    
    > (replace '() 7 3)
    '()
    
    > (replace '(1 (1 2 3 4) 3 4) 7 3)
    '(1 (1 2 7 4) 7 4)
    
    或:

    例如:


    (替换’(1(12 3 4(5 6 3)3 4))7 3)->’(1(12 7 4(5 6 7)7 4))

    我有一个没有子列表的列表功能。如果(carlst)是一个列表,我不知道如何递归到函数中。好的,这很简单。你知道你是如何处理匹配替换元素的情况的,对吗?您的答案应该是
    (cons(替换(cdr lst)from to))
    。子列表案例的答案是类似的,只是对
    使用了不同的表达式(提示:如果内部列表是平面列表怎么办?对于
    ,您会使用什么?如果它不是平面列表,它还会工作吗?)。如果(carlst)是一个列表,我不知道如何递归到函数中。好的,这很简单。你知道你是如何处理匹配替换元素的情况的,对吗?您的答案应该是
    (cons(替换(cdr lst)from to))
    。子列表的答案是相似的,只是
    的表达式不同(提示:如果内部列表是平面列表怎么办?如果它不是平面列表,你会用什么?如果它不是平面列表,它还会工作吗?)嗯,你试过什么?嗯,你试过什么?