基本的定义形式
(define id expr)
id绑定expr的结果
4.5.1function 简写
define也支持函数的简写
(define (id arg ...) body ...+)
标准写法是
(define id (lambda (arg ...) body ...+))
函数的简写也支持剩余参数
4.5.2柯里化函数简写
(define make-add-suffix
(lambda (s2)
(lambda (s) (string-append s s2))))
从某种角度来说, make-add-suffix是一个两个参数的函数,但是实际上一次只能接收一个。一个函数接受一些参数返回一个接收另外一些参数的函数叫柯里化函数。
(define (make-add-suffix s2)
(lambda (s) (string-append s s2)))
这种简写方式反应了函数的调用方式。define也支持简写来定义柯里化函数调用。
(define ((make-ass-suffix s2) s)
(string-append s s2))
4.5.3多值和define-values
Racket 可以返回多值。试用values函数。
(define-values (id ...) expr)
可以实现多值绑定。
4.5.4 内部定义
语法声明里面的body可以是标识符或者表达式。在body内部的定义是内部定义。
内部定义和表达式可以混在一起,只要body最后返回的是表达式就可以了。
内部定义要在引用前定义,否则会发生错误。
内部定义会被翻译成等价的letrec形式。但是包括define-values,struct,define-syntax都可以出现在body里面。