如果我有一个S表达,例如“(1 2(3)(4(5))6 7),我将如何转换到这样(1 2列表3 4 5 6 7)?我基本上需要从s表达式中提取所有原子。是否有内置的函数可以帮助我做到这一点?转换的表情到列表方案
(define (convert-to-list s) ...)
到目前为止,我的算法是,如果第一个元素是一个原子将它附加到列表上。如果第一个元素是一个列表,然后获得该元素的汽车,然后调用与函数的函数(转换到列表),所以它抓住了递归的基本情况。并将其转换列表上调用的列表的cdr附加到它的车上。我试图从计算机程序的结构和解释中教授自己的方案,我只是在尝试随机的东西。以递归方式做这件事证明比我预期的更困难。
的[仅使用“的小策士”的形式拼合列表]可能的复制(http://stackoverflow.com/questions/7313563/flatten-a-list-using-only-小型策略者的形式)和[球拍/方案展开说明](http://stackoverflow.com/questions/13547965/racket-scheme-flatten-explanations)。 (这两篇文章都提到了'flatten'的高质量实现,它们不使用'append'。Disclosure:我写了一个这样的实现。) – 2013-05-09 02:58:19