I use let
to create a temporary variable, and then use this temporary variable in the next statement. However, DrScheme complained,
let: bad syntax (not an identifier and expression for a binding) in: temp
This is my code snippet:
(define (case-one-helper str)
(let (temp (substring str (+ 3 (string-contains str "my"))))
(substring temp (string-contains temp " "))))
I wonder if the value of variable created by let
has to be known at compiled time?
Edit
I've just figured out, missing ()
.
Thanks,
You need to put another set of parentheses around your
let
declarations:While not exactly the problem you're experiencing, but an aside based on your questioning about the sequence of evaluating the arguments,
let
is also "syntactic sugar" for a lambda followed by it's arguments that are first evaluated and then passed to the lambda which is then evaluated.For instance:
is the same as:
So, if you're ever wondering about evaluation sequence, the arguments are evaluated fully before the body is evaluated (and one argument cannot refer to an argument preceding it ... use
let*
for something that requires bindings like that).