美文网首页
4.7条件式

4.7条件式

作者: jarod_chan | 来源:发表于2015-11-21 15:22 被阅读27次

    大部分分支函数,像<,string?,结果是#t,#f。Racket对待所有非#f都当成#t。
    这种机制可以用#f代表失败或者可选值不存在。(但是不要过度使用这种机制,异常更适合用来处理失败)
    比如member函数可以同时负担两个职责。它可以用来查找列表里以某一项开始的剩余列表,也可以用来判断一个项是否存在列表中。

    4.7.1简单分支:if

      (if test-expr then-expr else-expr)
    

    if形式必须同时有then-expr和else-expr,else-expr不是可选的。使用when或者unless可以达到只有一个表达式的目的。

    4.7.2合并测试:and 或者 or

    and和or是语法形式,不是函数。不想函数,and和or形式可以跳过执行和后面的表达式如果前面的表达式得出了结果。

      (and expr ...)
    

    and返回#f如果任何表达式的值是#f。否者返回最后一个表达式的值。

      (or expr ...)
    

    or形式返回#f如果所有的表达式都是#f。否则,返回第一个不是#f的值。

      (define (get-milk? lst)
        (and (not (null? lst))
                (or (eq?  'milk (car lst))
                     (get-milk? (cdr lst)))))
    

    and和or执行直到最后一个表达式,然后表达式的值直接返回成结果。所以上面表达式是常量空间内求值。

    4.7.3链式测试:cond

     (cond [test-expr body ...+]
        ...)
    

    每个test表达式都是顺序执行。最后一个表达式可以用else。如果else没有使用,有没有表达式匹配,则返回<code>#void</code>

      (cond cond-clause ...)
          cond-clause=[test-expr then-body ...+]
        |[else then-body ...+]
        |[test-expr => proc-expr]
        |[test-expr]
    

    =>变种表示如果匹配结果为#t,则船体结果给后面函数,但是函数只能是单阐述的。
    单独一个测试表达式很少被使用,它返回表达的值。

    相关文章

      网友评论

          本文标题:4.7条件式

          本文链接:https://www.haomeiwen.com/subject/cnolhttx.html