summaryrefslogtreecommitdiffstats
path: root/net/ricketyspace/sicp/two/twentyseven.scm
blob: eea04bd13f9d680d746687d4044c570d9920c5f0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
;;;; License: CC0-1.0

(define-module (net ricketyspace sicp two twentyseven)
  #:export (sicp-deep-reverse))

(define (sicp-append list1 list2)
  (if (null? list1)
      list2
      (cons (car list1) (sicp-append (cdr list1) list2))))

(define (sicp-deep-reverse items)
  (cond ((null? items) '())
        ((pair? (car items))
         (sicp-append (sicp-deep-reverse (cdr items))
                      (list (sicp-deep-reverse (car items)))))
        (else
         (sicp-append (sicp-deep-reverse (cdr items))
                      (list (car items))))))

;;; Guile REPL

;;; scheme@(guile-user)> ,use (net ricketyspace sicp two twentyseven)
;;; scheme@(guile-user)> (sicp-deep-reverse '((1 2 3) (4 5 6)))
;;; $27 = ((6 5 4) (3 2 1))
;;; scheme@(guile-user)> (sicp-deep-reverse '(1 (4 5 6)))
;;; $28 = ((6 5 4) 1)
;;; scheme@(guile-user)> (sicp-deep-reverse '(1 (6)))
;;; $29 = ((6) 1)
;;; scheme@(guile-user)> (sicp-deep-reverse '(1 2 3 4 5 6))
;;; $30 = (6 5 4 3 2 1)