I'm currently messing around with "How To Design Programs" - using Scheme/Racket; I've come across a really peculiar feature in the R5RS version of Scheme.
When conducting a simple subtraction, albeit using values with decimal point accurace, answers are minutely off what would be expected.
For example; given the following subtraction operation:
(- 5.00 4.90)
=> 0.09999999999999965
When one should surely be expecting a clean 0.10? Whole number subtraction works as expected;
> (- 5 4)
=> 1
> (- 5 4.9)
=> 0.09999999999999965
Take for example, Exercise 3.1.1:
The next step is to make up examples for each of the functions. Determine how many attendees can afford a show at a ticket price of $3.00, $4.00, and $5.00. Use the examples to formulate a general rule that shows how to compute the number of attendees from the ticket price. Make up more examples if needed.
The rule in the example that was for every $0.10 taken off of the ticket prices, 15 more people would attend. So a quick function like this would work..
(define (attendees ticket-price)
(+ 120 (* (/ (- 5.00 ticket-price) 0.10) 15)))
However, this returns the (rather annoying)..
> (attendance 4.90)
=> 134.99999999999994
So after trying the (pretty much identical) solution from the text book..
(define (attendance price)
(+ (* (/ 15 .10) (- 5.00 price))
120))
I got exactly the same error. Is this something specific with my local system? I'm pretty curious - in reality I could simply use some form of rounding to correct this; but I'd rather know why it's occurring first!
Apart from that, I advise anyone interested in Lisp to look at HTDP. It appears to be quite a gentle text from skimming it, very hands on. I do like SICP - but thats more of a long term thing; I seem to spend a good few days doing the reading, then the exercises, then catching up with lectures online. HTDP seems to be a bit more like 'Oh, I've got 15 minutes spare - I'll look at HTDP'.