例如,看看这段代码(来自tspl4):
(define proc1
(lambda (x y)
(proc2 y x)))
如果我在计划中运行此程序...
#!r6rs
(import (rnrs))
(define proc1
(lambda (x y)
(proc2 y x)))
我收到此错误:
expand: unbound identifier in module in: proc2
...此代码可以正常工作:
#!r6rs
(import (rnrs))
(define proc2
+)
(define proc1
(lambda (x y)
(proc2 y x)))
(display (proc1 2 3)) ;output: 5
答案 0 :(得分:2)
它们都必须在同一个模块中定义(= r6rs lingo中的“library”)。但是您可以按照您想要的任何顺序定义它们 - 例如,在您的上一个剪辑中,您可以交换这两个定义,它将正常工作。但请注意,您不能将定义放在display
行之后 - 这是一个使用其值的表达式,因此如果您在其后移动函数定义,您将获得运行时错误。 (注意它是运行时错误而不是编译时错误。)