【发布时间】:2020-11-06 20:06:35
【问题描述】:
我正在尝试将 S 表达式列表转换为简单的原子列表,类似于 The Little Schemer 一书中的问题。
我的代码是(在 Dr.Racket 中输入):
> (define lat '((coffee) cup ((tea) cup) (and (hick)) cup))
> (define f
(lambda (lat)
(cond
((null? lat) (quote ()))
((atom? (car lat)) (cons (car lat) (f (cdr lat))))
(else (cons (f (car lat)) (f (cdr lat)))))))
> (f lat)
'((coffee) cup ((tea) cup) (and (hick)) cup)
以上代码返回的列表与输入列表相同。我尽力了,但得到了不同的答案,例如:
(coffee)
(cup . cup)
( () (()) (()) )
用于程序中的各种修改。
我想知道,我们能不能得到答案:
'(coffee cup tea cup and hick cup)
给定
'((coffee) cup ((tea) cup) (and (hick)) cup)
仅使用 cond cons car 和 cdr。
【问题讨论】:
标签: recursion scheme lisp flatten the-little-schemer