Code

#lang racket

(define (subsets s)
  (if (null? s)
      (list '())
      (let ((rest (subsets (cdr s))))
        (append rest (map 
                      (lambda (t) (cons (car s) t))
                      rest)))))

(define (subsets1 s)
  (if (null? s)
      (list '())
      (let ((rest (subsets1 (cdr s))))
        (append rest (map 
                      (lambda (t) (append (list (car s)) t))
                      rest)))))

; tests

(subsets (list 1 2 3))
(subsets1 (list 1 2 3))

Output

'(() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3))
'(() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3))