0

例如,看一下这段代码(来自 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
4

1 回答 1

2

它们都必须在同一个模块中定义(= r6rs 术语中的“库”)。但是你可以按照你想要的任何顺序定义它们——例如,在你的最后一个片段中,你可以交换两个定义,它会正常工作。但请注意,您不能将定义放在该display行之后——这是一个使用其的表达式,因此如果您将函数定义移到它之后,您将收到运行时错误。(请注意,这是一个运行时错误,而不是编译时错误。)

于 2010-06-04T20:25:02.110 回答