guess is a procedure, and not a number.  

The error message is telling you that it expects a number and not a procedure 
as the argument to sub1.

If you evaluate guess in the REPL, you can see the problem:

> guess
#<procedure:guess>

What you want is the following:

> (guess)
50


The problem was that you were passing in the procedure guess to sub1, when what 
you wanted to pass in was the result of applying the procedure. When you have 0 
argument functions, this distinction can sometimes be confusing, since the 
difference between 

guess 

and 

(guess) 

can seem purely stylistic. But the former is a procedure, while the latter is 
the resulting of evaluating that procedure with no arguments. In Racket, the 
use of parens around an identifier means that the identifier is a procedure 
that is being applied with 0 arguments.

I hope that helps.

-Spencer Gordon


On Sunday, October 20, 2013 at 11:42 AM, Joe Python wrote:

> #lang racket
> (define lower 1)
> (define upper 100)
> 
> (define (guess)
>   (quotient (+ lower upper) 2))
> 
> (define (smaller)
>   (set! upper (max lower (guess (sub1 guess))))
>   (guess)) 

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to