0

私がやろうとしているのは、シンボリック式を取り、そのすべての「葉」を左から右へのリストの数字に置き換えることです。そのため、一番左の葉を 1 に、次の葉を 2 などに置き換える必要があります。等

これは私が現在持っているコードです(私はR5RSを使用しており、突然変異を使用しないようにしています)

(define subst
  (lambda (sexp num)
    (cond ((null? sexp) '())
          ((not (pair? sexp)) (car num))
          (else (cons (subst (car sexp) num)
                      (subst (cdr sexp) (cdr num)))))))

(define numbers (list 1 2 3 4 5 6 7 8 9 10))

次の出力:

(subst '(((a (d . e)) (b . c)) . (c . d)) numbers)

は:

'(((1 (2 . 3)) (2 . 3)) 2 . 3)

私が出力したいのは次のとおりです。

'(((1 (2 . 3)) (4 . 5)) 6 . 7)

以前の subst の再帰で num を cdr num に変更する必要があると考えていましたが、葉を置き換えて置き換えたのですが、set を使用せずにそれを行う方法がわかりません!

どんな助けでも感謝します、ありがとう。

4

0 に答える 0