summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coding-exercises/2/14.rkt5
-rw-r--r--coding-exercises/2/17.rkt36
-rw-r--r--coding-exercises/2/18.rkt19
-rw-r--r--shared/lists.rkt28
4 files changed, 87 insertions, 1 deletions
diff --git a/coding-exercises/2/14.rkt b/coding-exercises/2/14.rkt
index 50d28fc..c2a0ca9 100644
--- a/coding-exercises/2/14.rkt
+++ b/coding-exercises/2/14.rkt
@@ -49,9 +49,12 @@
(print-interval-percent (mul-interval i1 i1))
(print-interval-percent (mul-interval i1 i2))))
-;; There are at least some problems as I understand:
+;; There are at least some problems as I understand from 2.14 and 2.15:
;; 1. Repeated intervals in an equation are dependent on each other
;; 2. Multiplicative identity is undefined and should not be uncertain
+;;
+;; In 2.16 I would try to rewrite the code to try to make the inverse under multiplication certain
+;; and would try to keep track of dependent intervals and maybe only introduce uncertainty once.
(define (print-lem)
(let ((i1 (make-center-percent 100.0 2.0))
(i2 (make-center-percent 200.0 3.0)))
diff --git a/coding-exercises/2/17.rkt b/coding-exercises/2/17.rkt
new file mode 100644
index 0000000..e4b1735
--- /dev/null
+++ b/coding-exercises/2/17.rkt
@@ -0,0 +1,36 @@
+#lang racket
+(require sicp)
+
+(define (append list1 list2)
+ (if (null? list1)
+ list2
+ (cons (car list1) (append (cdr list1) list2))))
+
+(define (length items)
+ (define (length-iter a c)
+ (if (null? a)
+ c
+ (length-iter (cdr a) (inc c))))
+ (length-iter items 0))
+
+(define (list-ref items n)
+ (if (= n 0)
+ (car items)
+ (list-ref
+ (cdr items)
+ (dec n))))
+
+(define (last-pair l)
+ (if (null? (cdr l))
+ l
+ (last-pair (cdr l))))
+
+(define (print-list)
+ (define odds (list 1 3 5 7 9 11))
+ (println odds)
+ (println (list-ref odds 2))
+ (println (length odds))
+ (println (append odds (list 22)))
+ (println (last-pair odds)))
+
+(print-list)
diff --git a/coding-exercises/2/18.rkt b/coding-exercises/2/18.rkt
new file mode 100644
index 0000000..5fab5f8
--- /dev/null
+++ b/coding-exercises/2/18.rkt
@@ -0,0 +1,19 @@
+#lang racket
+(require "../../shared/lists.rkt")
+
+;; grow in reverse method
+;; or pointer reversal method in other languages
+(define (reverse-rec l)
+ (define (iter l p)
+ (cond
+ ((null? l) p)
+ (else
+ (iter
+ (cdr l)
+ (cons (car l) p)))))
+ (iter l (list)))
+
+(define (print)
+ (println (list 1 4 9 16 25))
+ (reverse (list 1 4 9 16 25)))
+(print)
diff --git a/shared/lists.rkt b/shared/lists.rkt
new file mode 100644
index 0000000..9279a57
--- /dev/null
+++ b/shared/lists.rkt
@@ -0,0 +1,28 @@
+#lang racket
+(provide
+ append
+ length
+ list-ref)
+
+(define (append list1 list2)
+ (if (null? list1)
+ list2
+ (cons (car list1) (append (cdr list1) list2))))
+
+(define (length items)
+ (define (length-iter a c)
+ (if (null? a)
+ c
+ (length-iter (cdr a) (+ 1 c))))
+ (length-iter items 0))
+
+(define (list-ref items n)
+ (if (= n 0)
+ (car items)
+ (list-ref
+ (cdr items)
+ (- 1 n))))
+(define (last-pair l)
+ (if (null? (cdr l))
+ l
+ (last-pair (cdr l))))