如果我有一個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