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 lingoの「ライブラリ」)で定義する必要があります。ただし、任意の順序で定義できます。たとえば、最後のスニップで2つの定義を入れ替えることができ、正常に機能します。ただし、行の後に定義を置くことはできないことに注意してください。これはdisplayを使用する式であるため、関数定義をその後に移動すると、ランタイムエラーが発生します。(これはコンパイル時のエラーではなく、実行時のエラーであることに注意してください。)

于 2010-06-04T20:25:02.110 に答える