4.5定义:define

基本的定义形式

  (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里面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,906评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,337评论 19 139
  • 86.复合 Cases 共享相同代码块的多个switch 分支 分支可以合并, 写在分支后用逗号分开。如果任何模式...
    无沣阅读 5,292评论 1 5
  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 9,198评论 0 7
  • 我是北方人,父母都是地地道道的农民,小时候,家里以种地为生。每年的冬末春初是农忙的时候,这个时候的小麦已经被严...
    炭烤猪蹄阅读 2,854评论 2 1