Racket是否支持内部"定义"?

can*_*an. 3 scheme sicp racket

我是功能语言的新手,我正在使用Racket进行SICP编程任务.

下面是一段代码,Racket告诉我define: expected only one expression for the function body, but found 5 extra parts,在第5行((define (y k))中:

(define (simpson f a b n)

 (define h (/ (- b a) n))

 (define (y k)
  (f (+ a (* k h))))

 (define (factor k)
  (cond ((or (= k 0) (= k n))
         1)
   ((odd? k)
    4)
   (else
    2)))

 (define (term k)
  (* (factor k)
   (y k)))

 (define (next k)
  (+ k 1))

(if (not (even? n))
 (error "n can't be odd")
 (* (/ h 3)
  (sum term (exact->inexact a) next n))))
Run Code Online (Sandbox Code Playgroud)

我想这个问题与语言设置有关,但我已经使用了"高级"选项.

有人知道如何正确配置Racket,或者不支持内部"定义"?

Chr*_*ung 7

实际上,就像你说的那样:define高级语言不支持内部版本.对于使用SICP练习,我被告知最好使用该neil/sicp包:此处详细说明了使用它的说明.

但是,即使是标准的Racket语言(#lang racket)也会define毫无问题地支持内部语言.

  • Chris是对的,内部定义在#lang racket和neil/sicp中均受支持.如果您更喜欢使用高级教学语言(步进器是一个很棒的工具!)那么您可以使用`local`制作内部aka本地定义.见http://docs.racket-lang.org/htdp-langs/advanced.html?q=local#(form._((lib._lang/htdp-advanced..rkt)._local)) (4认同)