# [racket] [realm of racket] contract error with 'smaller' function

On Sun, Oct 20, 2013 at 5:42 PM, Joe Python <jopython at gmail.com> wrote:
>* I am not sure whether this is a the right list to post this question. Else
*>* please let me know.
*>*
*>* I run this in Dr. racket.
*>*
*>* #lang racket
*>* (define lower 1)
*>* (define upper 100)
*>*
*>* (define (guess)
*>* (quotient (+ lower upper) 2))
*>*
*>* (define (smaller)
*>* (set! upper (max lower (guess (sub1 guess))))
*>*
*
The problem is here: `(sub1 guess)'.
`guess' is a function, and here you are trying to subtract 1 from a
*function*, i.e., you are trying to subtract 1 from something that is not a
number, whereas you probably want to subtract 1 from the *result* of
applying the function `guess' to no arguments, which itself should be a
number.
If you need more explanation:
Think of a function like `guess' as a machine that produces a bag of gums
each time you press the green button on it (= applying it to arguments,
i.e., writing `(guess)' ).
What you wrote is that you want to remove one gum from the *machine*,
whereas what you want is to press the green button to produce a bag of
gums, and remove one gum from this bag.
You have another problem here: `(guess (sub1 guess))'
How many arguments can your function `guess' take as input? (see its
definition)
How many arguments are you trying to apply it to?
HTH,
Laurent
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20131020/ae166624/attachment.html>