All pastes #794311 Raw Edit

MY CODE

public text v1 · immutable
#794311 ·published 2007-11-23 00:33 UTC
rendered paste body

;; ******************
;;  Assignment 8 Q3
;;    Mark Leung
;;     20266764
;; ******************

;; *********
;;  3A)
;; *********

;; Contract: foldr2: (X X -> Y) (Listof X) (Listof X)=> (Listof Y)

;; Purpose:  Applies a function on both elements of a list.

;; Examples: (foldr2 + 0 '(1 2 3) '(4 5 6 7)) => 21
;;           (foldr2 * 1  '(1 2 3) '(3 2 1))  => 36 

;; Definitions:

(define (foldr2 f base list1 list2)
  (cond
    [(and (empty? list1) (empty? list2))  base ]
    [(and (empty? list1) (cons? list2)) (f (first list2) (foldr2 f base empty (rest list2)))  ]
    [(and (empty? list2) (cons? list1)) (f (first list1) (foldr2 f base (rest list1) empty))  ]
    [ else (f (first list1) (first list2) (foldr2 f base (rest list1) (rest list2)))  ] ))

;; Tests:
" Tests foldr2"
( = (foldr2 + 0 '(1 2 3) '(4 5 6 7)) 28)
( = (foldr2 * 1  '(1 2 3) '(3 2 1))  36) 
( = (foldr2 + 0 '(1 2 3) '(1 1 1 1 1))  11)


;; ************
;;   3B)
;; ************

;; Contract: map2: (X -> Y) (Listof X) (Listof X) => (Listof Y)

;; Purpose: Makes a list of the result of function foldr2 on each element of list.

;; Examples: (map2 + '(1 2 3) '(1 2 3))  => '(2 4 6)
;;           (map2 + '(1 1 1) '(1 1 1))  => '(2 2 2)

;; Definitions:

(define (map2 f list1 list2)
  (foldr2
     (lambda (a b c) (cons (f a b) c)) empty list1 list2))

;; Tests:
"Tests map2"
(equal? (map2 + '(1 2 3) '(1 2 3)) '(2 4 6)) 
(equal? (map2 + '(1 1 1) '(1 1 1)) '(2 2 2))
;; *************

;; *********
;;   3C)
;; *********

;; Contract: zip: (listof X) (listof X) => (listof Y)
;; Purpose: Returns a lists of two-element lists, from corresponding elements in the two original lists
;; Examples: (zip '(a b c d) '(1 2 3 4)) => (list (list 'a 1) (list 'b 2) (list 'c 3) (list 'd 4))
;;           (zip '(1 2 3 4) '(a b c d)) => (list (list 1 'a) (list 2 'b) (list 3 'c) (list 4 'd))

;; Definitions:

(define (zip list1 list2)
  (foldr2 (lambda (a b c) (cons (list a b) c)) empty list1 list2))

;; Tests:
" Tests zip function"
(equal? (zip '(a b c d) '(1 2 3 4)) (list (list 'a 1) (list 'b 2) (list 'c 3) (list 'd 4)))
(equal? (zip '(1 2 3 4) '(a b c d)) (list (list 1 'a) (list 2 'b) (list 3 'c) (list 4 'd)))


;; ********
;;   3D)
;; ********

;; Contract: dot-product: alon alon => num

;; Purpose: Gets the dot product of the two lists.

;; Examples: (dot-product '(2 3 4) '(4 3 1)) => 21
;;           (dot-product '(1 2 3) '(3 2 1)) => 10
;;           (dot-product '(1 1 1) '(2 2 2)) => 6

;; Definitions:

(define (dot-product alon1 alon2)
  (foldr2 (lambda (a b c) (+ ( * a b) c)) 0 alon1 alon2))

;; Tests: 
"Tests dot-product function"
( = (dot-product '(2 3 4) '(4 3 1)) 21)
( = (dot-product '(1 2 3) '(3 2 1)) 10)
( = (dot-product '(1 1 1) '(2 2 2)) 6)

;; --------------

;; *********************
;;   PROGRAM FINISHED
;; *********************