Functional Problem Solving (CSC 151 2015F) : EBoards
Primary: [Front Door] [Schedule] - [Academic Honesty] [Disabilities] [Email] - [FAQ] [Teaching & Learning] [Grading] [Taking Notes] [Rubric] [Remote Access]
Current: [Assignment] [EBoard] [Lab] [Outline] [Reading]
Sections: [Assignments] [EBoards] [Labs] [Outlines] [Readings] - [Examples] [Handouts]
Reference: [Setup] [VM] [Errors] - [Functions A-Z] [Functions By Topic] - [Racket] [Scheme Report (R5RS)] [R6RS] [TSPL4]
Related Courses: [Curtsinger (2015F)] [Davis (2013F)] [Rebelsky (2015S)] [Weinman (2014F)]
Misc: [Submit Questions] - [SamR] [Glimmer Labs] [CS@Grinnell] [Grinnell] - [Issue Tracker (Course)]
Overview
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
maporls. 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.
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