以下のコード using 'named let'
and 'for'
loop を使用して、それ自体がリストである可能性のある要素のリストを平坦化できます。
(define (myflatten ll)
(define ol '())
(let loop ((ll ll))
(for ((i ll))
(if (list? i)
(loop i)
(set! ol (cons i ol)))))
(reverse ol))
(myflatten '(a () (b e (c)) (((d)))))
出力:
'(a b e c d)
ただし、'set!'
一般的には好まれないものを使用します。
ループは再帰'for'
に置き換えることもできます:'named let'
(define (myflatten ll)
(define ol '())
(let outer ((ll ll))
(let inner ((il ll))
(cond
[(empty? il)]
[(list? (first il))
(outer (first il))
(inner (rest il))]
[else
(set! ol (cons (first il) ol))
(inner (rest il))])))
(reverse ol))