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)
|