CSC 324 Tutorial Week 2 ======================= Values versus side-effects ========================== Most functions in Scheme return values, though some (like display) have side effects. Question: After tutorial, try (sqrt -1) at home (answer: 0 + 1i) Also, try (/ 1 3), (/ 1 0) (answer: 1/3, error) Question: Write a procedure, naming it sqrt-real, that takes a number and if the number is negative displays "Error: square root of negative number." otherwise returns the square root of the number. Answer: (define sqrt-real (lambda (x) (if (< x 0) (display "Error: square root of negative number.") (sqrt x)))) Question: What do you expect from: 2 (display 2) (+ 1 2) (+ 1 (display 2)) (+ 1 (sqrt-real 4)) (sqrt-real -4) (+ 1 (sqrt-real -4)) Answer: => 2 display 2, no return value => 3 error => 3 display "Error ..." display "Error ...", then get an error Procedures taking procedures ============================ Question: Write an expression that returns whether cosine (cos) and the exponential function (exp) intersect on the y-axis. Answer: (= (cos 0) (exp 0)) returns #t Question: Write and name a procedure that takes two procedures and returns whether they intersect on the y-axis. Answer: (define intersect-on-y-axis (lambda (f g) (= (f 0) (g 0)))) Procedures returning procedures =============================== Question: Write a procedure named inc that returns its argument plus 1. Write a procedure named after-next that returns its argument plus 2. Write a procedure named dec that returns its argument minus 1. Answer: (define inc (lambda (x) (+ x 1))) (define after-next (lambda (x) (+ x 2))) (define dec (lambda (x) (+ x -1))) Question: Write a good header comment for a procedure named p that can be used as follows: (define inc (p 1)) (define after-next (p 2)) (define dec (p -1)) Decide on a better name for p. Define p. Answer: p takes a number and returns a procedure that takes a number and returns the sum of that number and the number given to p generate-adder (define generate-adder (lambda (delta) (lambda (x) (+ x delta)))) Question: What are the values of: generate-adder (generate-adder 1) ((generate-adder 1) 2) Answer: 3