Scheme: when are expressions in let evaluated?

user782220

On page 66 of "The Seasoned Schemer" it says that (let ...) is an abbreviation for :

(let ((x1 a1) ... (xn an)) b ...) = ((lambda (x1 ... xn) b ...) a1 ... an)

Its used on for example on page 70:

(define depth*
  (lambda (l)
    (let ((a (add1 (depth* (car l))))
          (d (depth* (cdr l))))
      (cond
        ((null? l) 1)
        ((atom? (car l)) d)
        (else (cond
                ((> d a) d)
                (else a)))))))

But that above definition of lambda would suggest that (add1 (depth* (car l)) and (depth* (cdr l)) are evaluated and passed into the lambda represented by (lambda (x1 ... xn) b ...). But this would mean that the list l, which could potentially be empty, would be passed to car and cdr before the null check in (null? l) 1) is ever done.

Óscar López

You're right in stating that (car l) and (cdr l) will get executed before testing if l is null, therefore raising an error if l is indeed null. Keep reading the book, in the following two pages this is explained, and a correct version of depth* is shown.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

When are enable_if_t expressions evaluated?

From Dev

When are enable_if_t expressions evaluated?

From Dev

Are default argument expressions evaluated even when the arguments are provided?

From Dev

Are default argument expressions evaluated even when the arguments are provided?

From Java

How is Swift IF LET evaluated?

From Dev

SPEL expressions not evaluated dynamically

From Dev

EL expressions not evaluated in JSP

From Dev

how dependent bindings in let are evaluated?

From Dev

how dependent bindings in let are evaluated?

From Dev

Usage of nested let or let* in scheme

From Dev

Expressions are not evaluated in the nested ansible variables

From Dev

Scheme let bound statements

From Dev

Understanding expressions in Scheme

From Dev

Understanding expressions in Scheme

From Dev

When are vals evaluated exactly?

From Dev

When is the CASE statement evaluated?

From Dev

When is an ng-if evaluated?

From Dev

the mechanics of let! in computation expressions

From Dev

Nested "Let" expressions in Ocaml

From Dev

What is the difference between let and let* in Scheme?

From Dev

Save logical expressions to file that can be evaluated later

From Dev

Passing expressions to be evaluated within a go application?

From Dev

How are java increment statements evaluated in complex expressions

From Dev

Where are Java 8 lambda expressions evaluated?

From Dev

Does a computer remember results of evaluated expressions?

From Dev

Why is let preferred to define in Scheme?

From Dev

let-over-lambda in Scheme?

From Dev

Function Definitions After Expressions in Scheme

From Dev

Function Definitions After Expressions in Scheme

Related Related

HotTag

Archive