(译)Scheme简明教程6条件语句

摘要:
第4章条件语句与其他编程语句一样,Scheme也包含条件语句。基本结构是if:(if test condition then branch else branch)如果测试条件操作的结果为真(即,除#f之外的任何其他值),则将运行“then”分支(即,满足条件时的运行分支)。否则,“else”分支将运行“else”分支是可选的。(definep80)(如果(>p70)“安全”不安全)=

第四章条件语句

和其它的编程语句一样,Scheme 也包含条件语句。最基本的结构就是if

(if 测试条件

    then-分支

    else-分支)

如果测试条件运算的结果是真(即,非#f的任何其它值)”then”分支将会被运行(即满足条件时的运行分支)。否则,”else”分支会被运行。”else”分支是可选的。

(define p 80)

 

(if (> p 70) 

    'safe

    'unsafe)

=>  safe 

 

(if (< p 90)

    'low-pressure) ;no ``else'' branch

=>  low-pressure 

为了方便,Scheme还提供了一些其它的条件结构语句。它们可以被定义成宏来扩充if表达式。

4.1          whenunless

当我们只需要一个基本条件语句分支时(”then”分支或”else”分支),使用whenunless会更方便。(这里的示例已经更换,原示例)

(definea10)

(defineb20)

(when(< a b)

       (display“a)

       (displaya)

       (display“b)

       (displayb)

       (display“a大于b” ) )

先判断a是否小于b,这个条件成立时会输出5条信息。

使用if实现相同的程序会是这样:

(definea10)

(defineb20)

(if(< a b)

       (begin

              (display“a)

              (displaya)

              (display“b)

              (displayb)

              (display“a大于b” ) ))

注意when的分支是一个隐式的begin语句结构,而如果if的分支有多个代码结构时,需要一个显式的begin代码结构。

同样的功能还可以像下面这样用unless来写(unlesswhen的意思正好相反)

(definea10)

(defineb20)

(unless(>= a b)

       (display“a)

       (displaya)

       (display“b)

       (displayb)

       (display“a大于b” ) )

并不是所有的Scheme环境都提供whenunless。如果你的Scheme中没有,你可以用宏来自定义出whenunless(宏,见第8)

4.2          cond

cond结构在表示多重if表达式时很方便,多重if结构除了最后一个else分支以外的其余分支都会包含一个新的if条件。因此,

(if (char<? c #\c) -1

    (if (char=? c #\c) 0

        1))

这样的结构都可以使用cond来这样写:

(cond ((char<? c #\c) -1)

      ((char=? c #\c) 0)

      (else 1))

cond就是这样的一种多分支条件结构。每个从句都包含一个判断条件和一个相关的操作。第一个判断成立的从句将会引发它相关的操作执行。如果任何一个分支的条件判断都不成立则最后一个else分支将会执行(else分支语句是可选的)

cond的分支操作都是begins结构。

4.3          case

cond结构的每个测试条件是一个测试条件的分支条件时,可以缩减为一个case表达式。

(definec #\c)

(case c

  ((#\a) 1)

  ((#\b) 2)

  ((#\c) 3)

  (else 4))

=>  3

分支头值是#\c 的分支将被执行。

4.4          andor

Scheme提供了对boolean值进行逻辑与(”and”)和逻辑或(”or”)运算的结构。(我们已经见过了布尔类型的求反运算not过程。)

当所有子结构的值都是真时,and的返回值是真,实际上,and的运行结果是最后一个子结构的值。如果任何一个子结构的值都是假,则返回#f

(and 1 2)  =>  2

(and #f 1) =>  #f

or会返回它第一个为值为真的子结构的结果。如果所有的子结构的值都为假,or则返回#f

(or 1 2)  =>  1

(or #f 1) =>  1

andor都是从左向右运算。当某个子结构可以决定最终结果时,andor会忽略剩余的子结构。

(and 1 #f expression-guaranteed-to-cause-error)

=>  #f

 

(or 1 #f expression-guaranteed-to-cause-error)

=>  1

免责声明:文章转载自《(译)Scheme简明教程6条件语句》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇windows7 配置iis技巧3月1日起执行!江苏居民阶梯电价有变化!下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JS实现“隐藏与显示”功能(多种方法)

1,通过按钮实现隐藏与显示: 这个是通过按钮点击实现的隐藏与显示,具体代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47...

巧用hover改变css样式和背景

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="jquery-3.2.1.js"></script...

easyUI-datagrid属性设置display:none,表头不显示

<div class="box1"> <div class="dg1Box" style="margin-top:15px; margin-left:25px;"> <table id="dg1" style="575px;"></table> <...

CentOS VNC配置(转)

一、VNC简单介绍:   VNC,全称为Virtual NetworkComputing,它是一个桌面共享系统。它的功能,类似于windows中 的远程桌面功能。VNC使用了 RFB(RemoteFrameBuffer,远程帧缓冲)协议来实现远程控制另外一台计算机。它把键盘、鼠标动作发送到远程计算机,并把远程计算机的屏 幕发回到本地。VNC技术与平台无关...

html实现弹框,并伴随遮罩层,且弹框居中

本文介绍的内容主要实现的功能有,出现弹框,并且伴随遮罩层,且弹框一直居中。 html和js代码: <div id="hidebg"></div> <div onClick="hidebox();"> <div> <p class="box-head"...

Linux程序调试GDB——数据查看

查看栈信息 当程序被停住了,首先要确认的就是程序是在哪儿被断住的。这个一般是通过查看调用栈信息来看的。在gdb中,查看调用栈的命令是backtrace,可以简写为bt。 (gdb) bt#0 pop () at stack.c:10#1 0x080484a6 in main () at main.c:12 也可以通过info stack命令实现类似的功能...