`

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

阅读更多

第四章 条件语句

和其它的编程语句一样,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          when unless

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

(define a 10)

(define b 20)

(when (< a b)

       (display “a)

       (display a)

       (display “b)

       (display b)

       (display “a大于b” ) )

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

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

(define a 10)

(define b 20)

(if (< a b)

       (begin

              (display “a)

              (display a)

              (display “b)

              (display b)

              (display “a大于b” ) ))

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

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

(define a 10)

(define b 20)

(unless (>= a b)

       (display “a)

       (display a)

       (display “b)

       (display b)

       (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表达式。

(define c #\c)

(case c

  ((#\a) 1)

  ((#\b) 2)

  ((#\c) 3)

  (else 4))

=>  3

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

4.4          and or

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

分享到:
评论

相关推荐

    Fluent_Scheme简明中文手册-带书签.pdf

    5. Fluent-Scheme-UDFs的高级特性,例如如何使用RP_Get和RP_Set函数在运行时获取和设置变量的值。 6. Fluent-Scheme的内置函数库,可能包括用于数学计算的函数、字符串处理函数等。 7. 与Fluent图形用户界面(GUI)...

    scheme简明教程

    这是一本在国外比较有名的Scheme编程语言的入门教材。本教材适合任何对Scheme编程语言感兴趣的人阅读,尤其是有其他编程语言(特别是动态语言)编程经验,希望快速了解Scheme的不同点并且快速上手写点东西的人。

    fluent——scheme简明中文手册

    由于提供的文件内容片段实际上并没有提供关于标题“fluent——scheme简明中文手册”的具体内容,而是呈现了一些无序的数字和章节标题,我们无法直接基于这些片段生成详尽的知识点。但我们可以根据手册的标题,以及...

    A unified scheme for adaptive stroke-based rendering.pdf

    标题与描述中的“统一方案(unified scheme)”与“基于笔触的自适应渲染(adaptive stroke-based rendering)”是本文的关键概念,涉及到计算机图形学领域中的非摄影真实感渲染技术(NPR)。该论文由Hyung W. Kang...

    CorSegRec: A Topology-Preserving Scheme for Extracting Fully-Con

    CorSegRec: A Topology-Preserving Scheme for Extracting Fully-Connected Coronary Arteries from CT Angiography CorSegRec:拓扑保持 全连通提取方案 冠状动脉CT血管造影

    Android-scheme-libscheme-lib是一个scheme使用的库

    **Android Scheme Libs: Scheme-Lib for Android** Scheme-Lib是一个专门为Scheme编程语言设计的库,特别针对Android平台进行了优化和适配。Scheme是一种历史悠久、功能强大的Lisp方言,以其简洁的语法和强大的函数...

    fluent_scheme语言手册

    - 条件判断(if命令)和循环控制(do循环和for-each循环)是编程中常用的控制流语句,用于实现程序逻辑。 - 格式化输出(format命令)部分讲解了如何在Scheme中格式化文本输出。 5. **Aliasesim TUI, Beispiele, ...

    A Preprocessing Scheme for High-Cardinality Categorical Attributes

    "A Preprocessing Scheme for High-Cardinality Categorical Attributes"这个主题探讨的就是如何有效地处理这类问题。 一、高基数类别变量的挑战 1. 维度灾难:高基数会导致数据的维度增加,这可能会引起过拟合,...

    scheme语言中文教程

    - 条件判断:如使用if、cond、and、or、when、unless等构造条件语句。 - 变量和赋值:通过定义变量和进行赋值操作来管理数据。 - 表(list)操作:Scheme中的表是一种基本的数据结构,教程会介绍如何创建、访问和...

    A novel color image watermarking scheme in nonsampled contourlet-domain

    ### 一种非采样轮廓域中的新型彩色图像水印方案 #### 概述 本文介绍了一种基于非采样轮廓变换(NSCT)和支持向量回归(SVR)技术的新型彩色图像水印算法。该算法针对几何畸变攻击具有良好的抵抗能力,能够在保持...

    Fluent Scheme中文手册修订.docx

    4. Fluent-Scheme-UDFs 接口 Fluent Scheme 提供了一个 UDFs(User-Defined Functions)接口,允许用户定义自己的函数。该接口包括: * 数据交换:通过使用 `udf` 函数,可以在 Fluent 和 Scheme 之间交换数据。 *...

    Mit.Press-Teach.Yourself.Scheme.pdf (英文)

    《Teach Yourself Scheme in Fixnum Days》是一本详尽的教程,旨在帮助读者在有限的时间内掌握Scheme语言的基础及进阶知识。此书由Dorai Sitaram撰写,并且在网络上部分中文翻译已经存在(参考链接:...

    HA-ColorSchemeDesigner09-yfy

    《HA-ColorSchemeDesigner09-yfy:探索配色艺术与专业工具的奥秘》 在数字设计领域,色彩搭配是至关重要的一环,它能够直接影响到用户对产品的第一印象和使用体验。"HA-ColorSchemeDesigner09-yfy" 是一款专为设计...

    Python库 | scheme-2.0.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:scheme-2.0.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    mit-scheme-fererence

    - **标题**:“mit-scheme-fererence”(应当是“MIT Scheme Reference”的误拼)指向了MIT Scheme的一个版本的手册,这是一份详尽的技术文档,用于指导用户如何有效地使用MIT Scheme这一Lisp方言进行编程。...

    In-pixel charge addition scheme applied in time-delay integration CMOS image sensors

    An addition scheme applicable to time-delay integration (TDI) CMOS image sensor is proposed, which adds signals in the charge domain in the pixel array. A two-shared pixel structure adopting two-...

    mit-scheme的基本使用教程

    《MIT-Scheme的基本使用教程》 MIT-Scheme是一款基于R5RS标准的Scheme实现,它以其简洁、高效和可扩展性著称。本教程将详细讲解如何使用MIT-Scheme进行编程,包括在命令行环境和Emacs编辑器下的操作。 一、MIT-...

    PyPI 官网下载 | calysto_scheme-1.4.5-py2.py3-none-any.whl

    标题中的"PyPI 官网下载 | calysto_scheme-1.4.5-py2.py3-none-any.whl"表明这是一个从Python Package Index (PyPI)官方源下载的软件包,具体是`calysto_scheme`的1.4.5版本。PyPI是Python社区最常用的第三方库分发...

Global site tag (gtag.js) - Google Analytics