1

リストの要素をSchemeの別の要素に置き換える必要がありますが、問題は、置き換える必要があるリストがネストできることです。

たとえば、リストが'(1 (2 3 4 5) (6 7))あり、5 を 9 に置き換える必要がある場合、出力は'(1 (2 3 4 9) (6 7)).

この問題について教えてください。

4

2 に答える 2

2

ここに関数があります:

(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)

また:

(define (replace L new old)

  (if (list? L)
      (map
       (lambda (lst) (replace lst new old))
       L)
      (if (equal? L old)
      new
      L)))

例:

(置換 '(1 (1 2 3 4 (5 6 3) 3 4)) 7 3) -> '(1 (1 2 7 4 (5 6 7) 7 4))

于 2017-01-02T00:16:35.530 に答える