Scheme 球拍是否支持“内部”功能;定义“?”;?
我是函数式语言的新手,我正在用Racket做SICP编程作业 下面是一段代码,Racket告诉我,Scheme 球拍是否支持“内部”功能;定义“?”;?,scheme,racket,sicp,Scheme,Racket,Sicp,我是函数式语言的新手,我正在用Racket做SICP编程作业 下面是一段代码,Racket告诉我,define:函数体只需要一个表达式,但在第5行((define(yk))中发现了5个额外的部分: 我想这个问题与语言设置有关,但我已经使用了“高级”选项 有人知道如何正确配置Racket,或者内部“define”不受支持吗?事实上,正如您所说:高级语言不支持内部defines。对于使用SICP练习,我被告知最好使用neil/SICP软件包: 然而,即使是标准的Racket语言(#lang Rack
define:函数体只需要一个表达式,但在第5行((define(yk)
)中发现了5个额外的部分:
我想这个问题与语言设置有关,但我已经使用了“高级”选项
有人知道如何正确配置Racket,或者内部“define”不受支持吗?事实上,正如您所说:高级语言不支持内部define
s。对于使用SICP练习,我被告知最好使用neil/SICP
软件包:
然而,即使是标准的Racket语言(#lang Racket
)也会支持内部定义
而不会出现问题。Chris是对的,内部定义在#lang Racket和neil/sicp中都受支持。如果您更喜欢使用高级教学语言(stepper是一个很棒的工具!)然后,您可以使用local
创建内部本地定义。请参阅
(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))))