summaryrefslogtreecommitdiff
path: root/coding-exercises/2/27.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'coding-exercises/2/27.rkt')
-rw-r--r--coding-exercises/2/27.rkt28
1 files changed, 28 insertions, 0 deletions
diff --git a/coding-exercises/2/27.rkt b/coding-exercises/2/27.rkt
new file mode 100644
index 0000000..b52f7b3
--- /dev/null
+++ b/coding-exercises/2/27.rkt
@@ -0,0 +1,28 @@
+#lang racket
+(require sicp)
+
+(define (reverse l)
+ (define (iter l p)
+ (cond
+ ((null? l) p)
+ (else
+ (iter
+ (cdr l)
+ (cons (car l) p)))))
+ (iter l (list)))
+
+(define (deep-reverse nested-list)
+ (define (iter l p)
+ (cond
+ ((null? l) p)
+ ((pair? (car l))
+ (iter (cdr l)
+ (cons (iter (car l) nil)
+ p)))
+ (else
+ (iter
+ (cdr l)
+ (cons (car l) p)))))
+ (iter nested-list nil))
+
+(deep-reverse (list (list 1 2) (list 3 4)))