`

(译)Scheme简明教程2-数据类型之简单数据类型

阅读更多

第二章 数据类型

数据类型是一组相关的值信息集。各种数据类型互相联系,而且它们通常是具有层次关系。Scheme拥有丰富的数据类型:有一些是简单的类型,还有一些复合类型由其它的类型组合而成。

2.1          简单数据类型

Scheme中的简单包含 booleans (布尔类型) , numbers (数字类型), characters(字符类型) symbols(标识符类型)

2.1.1     Booleans

Scheme中的booleans类型用 #t#f来分别表示truefalseScheme拥有一个叫boolean?的过程,可以用来检测它的参数是否为boolean类型。

(boolean? #t)              =>  #t

(boolean? "Hello, World!") =>  #f

not过程则直接取其参数的相反值做为boolean类型结果。

(not #f)              =>  #t

(not #t)              =>  #f

(not "Hello, World!") =>  #f

最后一个表达式清晰的显示出了Scheme的一个便捷性:在一个需要boolean类型的上下文中,Scheme会将任何非 #f的值看成true

2.1.2     Numbers

Schemenumbers类型可以是integers(整型,例如42)rationals(有理数,例如22/7)reals(实数,例如3.14159),或complex(复数,2+3i)。一个整数是一个有理数,一个有理数是一个实数,一个实数是一个复数,一个复数是一个数字。Scheme中有可供各种数字进行类型判断的过程:

(number? 42)       =>  #t

(number? #t)       =>  #f

(complex? 2+3i)    =>  #t

(real? 2+3i)       =>  #f

(real? 3.1416)     =>  #t

(real? 22/7)       =>  #t

(real? 42)         =>  #t

(rational? 2+3i)   =>  #f

(rational? 3.1416) =>  #t

(rational? 22/7)   =>  #t

(integer? 22/7)    =>  #f

(integer? 42)      =>  #t

Schemeintegers(整型)不需要一定是10进制格式。可以通过在数字前加前缀 #b 来规定实2进制。这样 #b1100就是10进制数字12了。实现8进制和16进制格式的前缀分别是 #o #x(decimal前缀 #d是可选项)

我们可以使用通用相等判断过程 eqv? 来检测数字的相等性。(eqv ?有点类似引用的相等判断ReferenceEquals)

(eqv? 42 42)   =>  #t

(eqv? 42 #f)   =>  #f

(eqv? 42 42.0) =>  #f

不过,如果你知道参与比较的参数全是数字,选择专门用来进行数字相等判断的 = 会更合适些。(= 号运算时会根据需要对参数做类型转换,如 (= 4242”) 运算结果是 #t)

(= 42 42)   =>  #t

(= 42 #f)   -->ERROR!!!

(= 42 42.0) =>  #t

其它的数字比较还包括 <, <=, >, >=

(< 3 2)    =>  #f

(>= 4.5 3) =>  #t

+, -, *, /, expt等数学运算过程具有我们期待的功能

(+ 1 2 3)    =>  6

(- 5.3 2)    =>  3.3

(- 5 2 1)    =>  2

(* 1 2 3)    =>  6

(/ 6 3)      =>  2

(/ 22 7)     =>  22/7

(expt 2 3)   =>  8

(expt 4 1/2) =>  2.0

对于一个参数的情况,- / 过程会分别得到反数和倒数的结果。

maxmin 过程会分别返回提供给它们的参数的最大值和最小值。它们可以支持任何的数字。

(max 1 3 4 2 3) =>  4

(min 1 3 4 2 3) =>  1

abs过程会返回提供给它参数的绝对值。

(abs  3) =>  3

(abs -4) =>  4

 

这些还只是冰山一角。Scheme提供一整套丰富数学和三角运算过程。比如 atan, exp, sqrt等过程分别返回参数的余切、自然反对数和开方值。其它更具体的数学运算过程信息请参阅Revised^5 Report on the Algorithmic Language Scheme

2.1.3     Characters

Scheme中字符型数据通过在字符前加 #\前缀来表示。像 #\c就表示字符 c。那些非可视字符会有更多的描述名称,例如,#\newline, #\tab。空格字符可以写成 #\  ,或者可读性更好一些的#\space

字符类型判断过程是char?

(char? #\c) =>  #t

(char? 1)   =>  #f

(char? #\;) =>  #t

需要注意的是数据的分号字符不会引发注释。

字符类型数据有自己的比较判断过程:char=?, char<?, char<=?, char>?, char>=?

(char=? #\a #\a)  =>  #t

(char<? #\a #\b)  =>  #t

(char>=? #\a #\b) =>  #f

要实现忽略大小写的比较得使用 char-ci 过程代替 char过程

(char-ci=? #\a #\A) =>  #t

(char-ci<? #\a #\B) =>  #t

而类型转换过程分别是 char-downcase char-upcase

(char-downcase #\A) =>  #\a

(char-upcase #\a)   =>  #\A

2.1.4     Symbols

前面我们所见到的简单数据类型都是自运算的。也就是如果你在命令提示符后输入了任何这些类型的数据,运算后会返回和你输入内容是一样的结果。

#t  =>  #t

42  =>  42

#\c =>  #\c

Symbols并没有相同的表现方式。这是因为symbols通常在Scheme程序中被用来当做变量的标识,这样可以运算出变量所承载的值。然而symbols是一种简单数据类型,而且就像characersnumbers以及其它类型数据一样,是Scheme中可以传递的有效值类型。

创建一个单纯的symbol而非变量时,你需要使用quote过程:

(quote xyz)

=>  xyz

因为在Scheme中经常要引用这种类型,我们有一种更简便的方式。表达式 'E (quote E) Scheme中是等价的。

Schemesymbols由一个字符串来命令。在命名时不要和其它类型数据发生冲突,比如characters booleansnumbers 或复合类型。像 this-is-a-symboli18n <=>,和 $!#*都是symbols 161+2i#t”this-is-a-string”’(“hello” “world”) 都不是symbols类型数据(’(“hello” “world”) 是一个只包含两个字符串的List)。用来检查symbols类型数据的过程是symbol?

(symbol? 'xyz) =>  #t

(symbol? 42)   =>  #f

Schemesymbols类型通常都是不区分大小写的。因此Calorie calorie是等价的

(eqv? 'Calorie 'calorie)

=>  #t

我们还可以使用 define symbol 类型的数据 xyz当成一个全局的变量来使用:

(define xyz 9)

这样可以就创建了一个值为9的变量xyz.。如果现在直接在Scheme命令提示符后输入xyz,这样会将xyz中的值做为运算结果。

xyz

=>  9

如果想改变xyz中的值可以用set!来实现:

(set! xyz #\c)

现在xyz中的值就是字符 #\c了。

xyz

=>  #\c

分享到:
评论

相关推荐

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

    2. Scheme基础,这将包括Scheme的语法、数据类型、控制结构、函数定义、以及如何使用Scheme语言进行计算。 3. 用户自定义函数(UDFs)的介绍,包括UDF的结构、如何在Fluent中加载和卸载UDFs,以及如何在UDF中使用...

    scheme简明教程

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

    fluent——scheme简明中文手册

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

    2004 Locality-sensitive hashing scheme based on p-stable distributions.pdf

    在该方案中,哈希函数特别简单,尤其是当s=2时,即使用欧几里得范数时。新提出的哈希函数家族为解决随机近邻问题(包括近似解和精确解)提供了一种有效的解决方案。 本论文提出的基于s-稳定分布的LSH方案,通过选取...

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

    2. **动态性**: Scheme的动态类型和运行时编译使得代码修改和调试更加方便快捷。 3. **扩展性**: 方便地为Android应用添加新的功能或脚本,通过编写Scheme代码实现。 4. **跨平台潜力**: 虽然目前Scheme-Lib主要支持...

    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血管造影

    A Preprocessing Scheme for High-Cardinality Categorical Attributes

    2. 模型类型:不同的模型对类别处理的敏感度不同,例如决策树对one-hot编码容忍度较高,而神经网络则更适合嵌入。 3. 计算资源:处理高基数类别可能需要大量计算资源,因此需要平衡模型复杂性和性能。 4. 泛化能力:...

    fluent_scheme语言手册

    - Scheme语言的语法简洁,对数据的处理能力强,支持高级数据类型如列表和符号。 - 它是一种解释型语言,通常具有垃圾回收机制,易于学习和使用。 - Scheme语言广泛应用于教学和研究,因其简洁的语法和强大的表达...

    mit-scheme-fererence

    以上只是对MIT Scheme参考手册部分内容的简要分析,手册还包括更多关于数值、字符、字符串、列表、向量、位串、杂项数据类型、关联、过程、环境、输入/输出、操作系统接口、错误系统、图形以及Win32包的详细内容。...

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

    S-表达式是Scheme中的基本数据结构之一,所有Scheme程序都可以被看作是S-表达式的集合。S-表达式可以是原子(如数字、字符串)或者是列表。 #### 三、表单 **3.1 函数** - **3.1.1 函数参数** 函数可以定义固定...

    scheme语言中文教程

    - 表(list)操作:Scheme中的表是一种基本的数据结构,教程会介绍如何创建、访问和操作表,如list、cons、car、cdr等。 - 闭包和过程:详细解释过程的定义和闭包的概念,以及如何创建和使用过程。 - 字符串操作:...

    Fluent Scheme中文手册修订.docx

    2. Fluent-Scheme 接口 Fluent Scheme 提供了一个强大的接口机制,允许用户在 Fluent 中调用 Scheme 命令,并在 Scheme 中调用 Fluent 命令。该接口机制包括: * 在 Fluent 中调用 Scheme 命令:通过使用 `scheme`...

    Python库 | calysto_scheme-1.1.6-py2-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:calysto_scheme-1.1.6-py2-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    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社区最常用的第三方库分发...

    HA-ColorSchemeDesigner09-yfy

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

    mit-scheme的基本使用教程

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

    Scheme语言基础教程

    ### Scheme语言基础教程 #### Scheme语言概述 Scheme作为MIT基于LISP语言开发的一种变体,具有独特的地位。它不仅保留了LISP的核心理念——一种功能性的编程方式,而且通过简化和标准化,使得学习和使用更加便捷...

    mit-scheme-ref

    这份参考手册按照章节结构组织,涵盖了Scheme语言的各个方面,包括但不限于特殊形式、等价谓词、数字处理、字符和字符串操作、列表管理、向量和位串的使用、杂项数据类型、关联数组、过程、环境、输入输出、操作系统...

Global site tag (gtag.js) - Google Analytics