私がやろうとしているのは、シンボリック式を取り、そのすべての「葉」を左から右へのリストの数字に置き換えることです。そのため、一番左の葉を 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 を使用せずにそれを行う方法がわかりません!
どんな助けでも感謝します、ありがとう。