Added my solutions so far
This commit is contained in:
		
							
								
								
									
										61
									
								
								ex-2-30.rkt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								ex-2-30.rkt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
#lang racket
 | 
			
		||||
 | 
			
		||||
(define (accumulate op initial sequence)
 | 
			
		||||
  (if (null? sequence)
 | 
			
		||||
      initial
 | 
			
		||||
      (op (car sequence)
 | 
			
		||||
          (accumulate op initial (cdr sequence)))))
 | 
			
		||||
 | 
			
		||||
(define (square x) (* x x))
 | 
			
		||||
 | 
			
		||||
;; 2.30 oooh, we getting cool now are we?
 | 
			
		||||
(define (square-tree l)
 | 
			
		||||
  (cond
 | 
			
		||||
    ((null? l) l)
 | 
			
		||||
    ((list? (car l)) (cons (square-tree (car l))
 | 
			
		||||
                           (square-tree (cdr l))))
 | 
			
		||||
    (#t (cons (square (car l))
 | 
			
		||||
              (square-tree (cdr l))))))
 | 
			
		||||
 | 
			
		||||
(define (square-tree-map l)
 | 
			
		||||
  (map (λ (x)
 | 
			
		||||
         (if (list? x)
 | 
			
		||||
             (square-tree-map x)
 | 
			
		||||
             (square x)))
 | 
			
		||||
       l))
 | 
			
		||||
 | 
			
		||||
;; 2.31 hohoohoho nice
 | 
			
		||||
(define (tree-map f l)
 | 
			
		||||
  (map (λ (x)
 | 
			
		||||
         (if (list? x)
 | 
			
		||||
             (tree-map f x)
 | 
			
		||||
             (f x)))
 | 
			
		||||
       l))
 | 
			
		||||
(define (square-tree-final l) (tree-map square l))
 | 
			
		||||
 | 
			
		||||
;; 2.32 hmm.. cool stuff.
 | 
			
		||||
(define (subsets s)
 | 
			
		||||
  (if (null? s)
 | 
			
		||||
      (list '())
 | 
			
		||||
      (let ((rest (subsets (cdr s))))
 | 
			
		||||
        (append rest (map (λ (l) (cons (car s) l)) rest)))))
 | 
			
		||||
;; The reason this works, is because the set of subsets of a set s
 | 
			
		||||
;; can be defined as such:
 | 
			
		||||
;;  - if s is the empty set, the result is a set containing the empty set
 | 
			
		||||
;;  - otherwise, the result is a set containing:
 | 
			
		||||
;;    1. the subsets of s without the first element of s
 | 
			
		||||
;;    2. the subsets of s with the first element of s
 | 
			
		||||
;;    2 can be defined as the first element of s added to every
 | 
			
		||||
;;    subset of s that does not contain the first element of s.
 | 
			
		||||
;; probably not a very rigorous or formal definition, but good
 | 
			
		||||
;; enough for now.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;; 2.33
 | 
			
		||||
(define (map p sequence)
 | 
			
		||||
  (accumulate (lambda (x y) ⟨??⟩) nil sequence))
 | 
			
		||||
(define (append seq1 seq2)
 | 
			
		||||
  (accumulate cons ⟨??⟩ ⟨??⟩))
 | 
			
		||||
(define (length sequence)
 | 
			
		||||
  (accumulate ⟨??⟩ 0 sequence))
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user