开发者

How does `let` work in Scheme?

开发者 https://www.devze.com 2023-02-28 02:39 出处:网络
I use let to create a temporary variable, and then use this temporary variable in the next statement. However, DrScheme complained,

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,


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:

(let ((a (list 1 2 3))
      (b (list 4 5 6)))
     (cons a b))

is the same as:

((lambda (list-a list-b) (cons list-a list-b)) (list 1 2 3) (list 4 5 6))

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).


You need to put another set of parentheses around your let declarations:

(define (case-one-helper str)
  (let ((temp (substring str (+ 3 (string-contains str "my")))))
    (substring temp (string-contains temp " "))))
0

精彩评论

暂无评论...
验证码 换一张
取 消