diff options
Diffstat (limited to 'coding-exercises/2/30.rkt')
| -rw-r--r-- | coding-exercises/2/30.rkt | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/coding-exercises/2/30.rkt b/coding-exercises/2/30.rkt new file mode 100644 index 0000000..785a8dc --- /dev/null +++ b/coding-exercises/2/30.rkt @@ -0,0 +1,38 @@ +#lang racket +(define (scale-tree tree factor) + (cond ((null? tree) nil) + ((not (pair? tree)) (* tree factor)) + (else (cons (scale-tree (car tree) factor) + (scale-tree (cdr tree) factor))))) + +(define (scale-tree tree factor) + (map (lambda (sub-tree) + (if (pair? sub-tree) + (scale-tree subtree factor) + (* sub-tree factor))) + tree)) + +;; analogous to, but we now also have to test when to recurse in the middle of the tree +;; (define (square-list items) +;; (if (null? items) +;; (list) +;; (cons (square (car items)) (square-list (cdr items))))) +(define (square-tree tree) + (cond ((null? tree) nil) + ((not (pair? tree)) (* tree tree)) + (else (cons (square-tree (car tree)) + (square-tree (cdr tree)))))) + +(define test-tree (list 1 (list 2 (list 3 4) 5) (list 6 7))) +((lambda () + (display (square-tree test-tree)))) + +;; Can I also pass some state combining sequence and recursive operations? +(define (square-tree-map tree) + (map (lambda (subtree) + (if (pair? subtree) + (square-tree-map subtree) + (* subtree subtree))) + tree)) +((lambda () + (display (square-tree-map test-tree)))) |
