Вот как в scheme необходимо применять apply для решения реальных задач. j85wilson на канале #scheme продемонстрировал изящную реализацию генерации всех перестановок списка:
(define (perm lst)
(if (null? lst)
'(())
(apply append
(map (lambda (elt)
(map (lambda (rest) (cons elt rest))
(perm (filter (lambda (x) (not (eq? x elt))) lst))))
lst))))