26 lines
608 B
Text
26 lines
608 B
Text
(define (fflatten l)
|
|
(cond
|
|
[(null? l) null]
|
|
[(not (list? l)) (list l)]
|
|
[else (append (fflatten (first l)) (fflatten (rest l)))]))
|
|
|
|
;;
|
|
(define L' [[1] 2 [[3 4] 5] [[[]]] [[[6]]] 7 8 []])
|
|
|
|
(fflatten L) ;; use custom function
|
|
→ (1 2 3 4 5 6 7 8)
|
|
(flatten L) ;; use built-in
|
|
→ (1 2 3 4 5 6 7 8)
|
|
|
|
;; Remarks
|
|
;; null is the same as () - the empty list -
|
|
(flatten '(null null null))
|
|
→ null
|
|
(flatten '[ () () () ])
|
|
→ null
|
|
(flatten null)
|
|
❗ error: flatten : expected list : null
|
|
|
|
;; The 'reverse' of flatten is group
|
|
(group '( 4 5 5 5 6 6 7 8 7 7 7 9))
|
|
→ ((4) (5 5 5) (6 6) (7) (8) (7 7 7) (9))
|