Functional Problem Solving (CSC 151 2015F) : EBoards

CSC151.02 2015F, Class 22: Images as Functions from Position to Colors


Overview

Preliminaries

Admin

Upcoming Work

Extra Credit Opportunities

Academic

Peer Support

Other Good Things

HW Questions

Do you have hints on problem 1?

I'd probably write some helper functions.

How do I mix if and map?

    (map (lambda (x) (if (even? x) ....)) 
         (iota num))

Question 2 on the exam asks us to take a function as a parameter. Can we really do that?

Yes. You've seen it happen in other cases, such as with map or ls. Here's a simple example.

    ;;; Procedure:
    ;;;   apply-to-two
    ;;; Parameters:
    ;;;   fun, a one-parameter function 
    ;;; Purpose:
    ;;;   Apply fun to the value 2
    ;;; Produces:
    ;;;   val, a value
    ;;; Preconditions:
    ;;;   fun must accept an integer as an input
    ;;; Postconditions:
    ;;;   val = (fun 2)
    (define apply-to-two
      (lambda (fun)
        (fun 2)))

    > (apply-to-two square)
    4
    > (apply-to-two increment)
    3
    > (apply-to-two (lambda (x) (+ 7 (* x 2))))
    11

One of the functions is wrong on problem 2, isn't it?

Yes. Sorry.

How can I recolor the dots?

    ;;; Procedure:
    ;;;   recolor-dot
    ;;; Parameters:
    ;;;   dot, a drawing
    ;;; Purpose:
    ;;;   Recolor dot to match the requirements from problem
    ;;;   2 of assignment 5 of section 2 of CSC 151 2015F
    ;;; Produces:
    ;;;   recolored-dot, a drawing
    ;;; Preconditions:
    ;;;   [None]
    ;;; Postconditions:
    ;;;   (drawing-color recolored-dot) = "blue" if the y position of
    ;;;     of dot < 50
    ;;;   (drawing-color recolored-dot) = "red" otherwise
    ;;;   (drawing-left recolored-dot) = (drawing-left dot)
    ;;;   (drawing-top recolored-dot) = (drawing-top dot)
    ;;;   (drawing-width recolored-dot) = (drawing-width dot)
    ;;;   (drawing-height recolored-dot) = (drawing-height dot)

    ...

    (map recolor-dot (....))

How would you handle the recoloring of the dots in problem 2?

I'd write a separate helper function

    ;;; Procedure:
    ;;;   recolor-point
    ;;; Parameters:
    ;;;   point, a drawing
    ;;; Purpose:
    ;;;   Recolor point based on its position
    ;;; Produces:
    ;;;   colored-point, a drawing
    ;;; Preconditions:
    ;;;   [No additional]
    ;;; Postconditions:
    ;;;   If y < 50, colored-point is blue
    ;;;   Otherwise, colored-point is red

How do we compute a random number in problem 3?

(random n) gives an integer between 0 and n-1, inclusive.

Lab

Pretend Purple is (irgb 255 0 255)

Section 1 wants you to know that your answer to 3a will look something like

(define horiz-black-to-blue 
  (lambda (width height)
    (image-compute
     (lambda (col row)
       ...)
     width height)))

Writeup 3ef