4.8序列

2015-11-21  本文已影响30人  jarod_chan

Racket程序员更愿意写没有副作用的程序,因为纯函数的代码既容易测试又容易组合成大型程序。但是为了和外部环境无相作用,比如打印输入,操作图形界面,或者操作一个硬盘上的文件,我们需要序列。

4.8.1提前效果:begin

  (begin expr ...+)

expr安顺序执行,只返回最后一个表达式的值,其它被忽略。
很多形式,像lambda或者cond支持没有begin序列。这些形式被当做暗含begin。
begin形式在顶层,模块层,内部定义时有特殊作用。它可以构建在周围上下文之外的环境。这种行为主要用在宏里。

4.8.2滞后效果:begin0

  (begin0 expr ...+)

不同于begin,返回第一个表达式的值。在副作用发生在计算以后的情况下,特别是计算产生未知个数的结果的时候,它很有用。

4.8.3if效果: when unless

when用序列组合了if风格的条件,它只有then没有else。

  (when test-expr then-body ...+)

当测试表达式的结果是true,则所有的then-bodys都将被执行,且结果是最后一个表达式。

  (unless test-expr then-body ...+)

不同于when,除非测试表达式的结果为#f,否则then-bodys不被执行。

上一篇 下一篇

猜你喜欢

热点阅读