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