我要做的是采用符号表达式,并将其所有“叶子”替换为从左到右的列表中的数字,因此最左边的叶子应替换为 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 怎么做!
任何帮助将不胜感激,谢谢。