Есть несколько способов сгладить список. Во-первых, простое решение с использованием только простых процедур списка:
(define (flatten lst)
(cond ((null? lst)
'())
((not (list? lst))
(list lst))
(else
(append (flatten (car lst))
(flatten (cdr lst))))))
В этом другом решении используется процедура высшего порядка map
и apply
(в соответствии с предложением Джона Клемента):
(define (flatten lst)
(if (not (list? lst))
(list lst)
(apply append (map flatten lst))))
И, наконец, как уже упоминалось в комментариях, встроенная flatten
процедура найдена в некоторых реализациях Scheme, таких как Racket (я не знаю, доступна ли она в bigloo):
(require racket/list)
(flatten '(a b c (d (e)) (g f h)))