Problem with circular definition in Scheme
Posted
by user8472
on Stack Overflow
See other posts from Stack Overflow
or by user8472
Published on 2010-05-13T17:42:17Z
Indexed on
2010/05/13
18:04 UTC
Read the original article
Hit count: 250
I am currently working through SICP using Guile as my primary language for the exercises. I have found a strange behavior while implementing the exercises in chapter 3.5. I have reproduced this behavior using Guile 1.4, Guile 1.8.6 and Guile 1.8.7 on a variety of platforms and am certain it is not specific to my setup.
This code works fine (and computes e):
(define y (integral (delay dy) 1 0.001))
(define dy (stream-map (lambda (x) x) y))
(stream-ref y 1000)
The following code should give an identical result:
(define (solve f y0 dt)
(define y (integral (delay dy) y0 dt))
(define dy (stream-map f y))
y)
(solve (lambda (x) x) 1 0.001)
But it yields the error message:
standard input:7:14: While evaluating arguments to stream-map in expression (stream-map f y):
standard input:7:14: Unbound variable:
y ABORT: (unbound-variable)
So when embedded in a procedure definition, the (define y ...) does not work, whereas outside the procedure in the global environment at the REPL it works fine.
What am I doing wrong here? I can post the auxiliary code (i.e., the definitions of integral, stream-map etc.) if necessary, too. With the exception of the system-dependent code for cons-stream, they are all in the book. My own implementation of cons-stream for Guile is as follows:
(define-macro (cons-stream a b)
`(cons ,a (delay ,b)))
© Stack Overflow or respective owner