Stack overflow today led me to something … very strange. I feel like I must be 
missing something crushingly obvious.

To reproduce: start racket at the command line or hit “run” on a definitions 
window containing only “#lang racket”.

Then, paste:

(define map (lambda (l f)
    (cond
        ((null? l) '())
        (else (cons (f (car l)) (map (cdr l) f)))
    )
))

(Note that this version of map takes the function last.) Then, paste:

(map '(3 4 5) add1)

See this error:

map: contract violation
  expected: procedure?
  given: '(4 5)
  argument position: 1st
  other arguments…:

Note that the error occurs on the recursive call. This means that despite being 
inside of a binding of the name map, the function is using the built-in 
function.

When I try doing the same thing with a value defined in the empty program (with 
the name’f’), I see the error 

define-values: assignment disallowed;
 cannot re-define a constant
  constant: f

Which leads me to the suspicion that maybe possibly this message is supposed to 
be shown for the re-definition of ‘map’, as well?

Very confused,

John





-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to