代码之家  ›  专栏  ›  技术社区  ›  Frank

编写scheme函数,将给定搜索字符的列表中的元素加倍

  •  2
  • Frank  · 技术社区  · 8 年前

    (double '(a b c) 'c)
    

    '(a b c c)
    

    这是我目前掌握的代码

    (define (double x y)
      (cond ((null? x) '())
        ((not(equal? (car x) y)) (double (cdr x) y))
          (else (append (list (car x)) (append x (double (cdr x) y))))))
    

    好的,我发现了一个错误(至少我认为是这样),如果找不到我要找的字符,就把前面的元素保留在列表中,但现在我被else语句卡住了,我需要在那里输入什么来再次将元素添加到该位置并调用函数。这些是更新的更改

    (define (double x y)
      (cond ((null? x) '())
        ((not(equal? (car x) y)) (append (list (car x)) (double (cdr x) y)))
          (else <insert-code-here>)))
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   Mulan    8 年前

    如果元素匹配 y cons y

    否则,只需重新- 通过尾部递归的列表

    (define (double xs y)
      (cond ((null? xs) '())
            ((equal? y (car xs)) (cons y (cons y (double (cdr xs) y))))
            (else (cons (car xs) (double (cdr xs) y)))))
    
    (double '(a b c a b c a b c) 'c)
    ;; => '(a b c c a b c c a b c c)