如何处理在执行 sicp 练习 4.9 时产生的这个错误?
how to handle this error generated in doing sicp exercise 4.9?
我正在做 sicp 的 exercise.4.9,我正在尝试实现 "for statement" 的语法,它看起来像其他人在 c++ 中看到的那样:
(for (((i 0) (j 1))
(< (+ i j) 10)
((i (+ i 1))))
(display "i:")
(display i)
(display "\n")
(display "j:")
(display j)
(display "\n"))
语法如下:
(for ((initial-statement) (predicate-statement) (updating-statement)) (for-body))
我生成的是这样的:
((lambda ()
(define j 1)
(define i 0)
(define inner-loop
(if (< (+ i j) 10)
(begin (display "i:")
(display i)
(display "\n")
(display "j:")
(display j)
(display "\n")
(set! i (+ i 1))
(inner-loop))))
(inner-loop)))
我收到一条错误消息,指出第一个 inner-loop
调用试图接近一个未绑定的变量,
我想知道我应该生成的正确代码是什么样的?
正如@Rainer 在评论中提到的,您对 inner-loop
的定义不正确。
scheme中的一个函数定义为:(define (name ...args) body)
或者如果没有参数:(define (name) body)
以下作品:
((lambda ()
(define j 1)
(define i 0)
(define (inner-loop)
(if (< (+ i j) 10)
(begin (display "i:")
(display i)
(display "\n")
(display "j:")
(display j)
(display "\n")
(set! i (+ i 1))
(inner-loop))))
(inner-loop)))
我正在做 sicp 的 exercise.4.9,我正在尝试实现 "for statement" 的语法,它看起来像其他人在 c++ 中看到的那样:
(for (((i 0) (j 1))
(< (+ i j) 10)
((i (+ i 1))))
(display "i:")
(display i)
(display "\n")
(display "j:")
(display j)
(display "\n"))
语法如下:
(for ((initial-statement) (predicate-statement) (updating-statement)) (for-body))
我生成的是这样的:
((lambda ()
(define j 1)
(define i 0)
(define inner-loop
(if (< (+ i j) 10)
(begin (display "i:")
(display i)
(display "\n")
(display "j:")
(display j)
(display "\n")
(set! i (+ i 1))
(inner-loop))))
(inner-loop)))
我收到一条错误消息,指出第一个 inner-loop
调用试图接近一个未绑定的变量,
我想知道我应该生成的正确代码是什么样的?
正如@Rainer 在评论中提到的,您对 inner-loop
的定义不正确。
scheme中的一个函数定义为:(define (name ...args) body)
或者如果没有参数:(define (name) body)
以下作品:
((lambda ()
(define j 1)
(define i 0)
(define (inner-loop)
(if (< (+ i j) 10)
(begin (display "i:")
(display i)
(display "\n")
(display "j:")
(display j)
(display "\n")
(set! i (+ i 1))
(inner-loop))))
(inner-loop)))