Scheme的数据类型

原创 2005年04月23日 00:06:00
    Scheme中的数据非常之丰富!总的来说分两种,一种是简单数据类型,一种是复合数据类型。 简单数据类型中,又包含逻辑型,数值性,字符型和符号型这四种数据类型。 复杂数据类型,包含字符串型,向量型,点对型,和列表型。 下面分别简要介绍这些。
1:逻辑型
    这没什么好说的,就个真假问题,对应的数值是#t, #f这点请和c++中的true,false区别开来。 boolean? 这个过程,可以测试参数是否为逻辑型。
(boolean? #t) => #t
(boolean? #f) => #t
not 这个过程,和求逻辑非操作非常类似
(not #f) => #t
    注意,这两个例子,偶给的参数都是逻辑型,作为特例考虑,如参数不是逻辑型,而是别的类型数据,会如何?
(boolean? "Hello, world")
(not "Hello, world")
(boolean? 1)
(not 1)
   通过运行,可知,这四个语句,返回的都是#f,由此可知,只要这两个过程的参数非逻辑型,返回的都是#f
 2:数值型
    数值型,包括整数(32),分数(3/5),实数(1.234),复数(3+2i)
number? 测试是否是数值型,complex?测试是否为复数型,real?测试是否为实数,rational?测试是否为分数,integer?测试是否为整数
(number? 32) => #t
(number? 1/3) => #t
(number? 2+3i) => #t
(number? 1.111) => #t
(number? "hello, world") => #f
(complex? 1+2i) => #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
   scheme的整数,并不一定非要是十进制,也可以通过前缀来识别二进制(#b),八进制(#o),十六进制(#h)和可选的十进制前缀(#d),如#b1111,#o17,#hf,#d15,都是代表十进制中的15.
   整数的比较运算 eqv? 比较两个整数是否相等(eqv? 11 12) 当然你也可以用=来代替,如(= 11 12)和上面的语句是等效的 另外,还有<, <=, >, >=
(< 1 2) => #t
(> 1 2) => #f
(<= 1 2) =>#t
(>= 1 2) =>#f
    关于整数的算数运算+, -, *, /, 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
   关于-, /的单目运算
(- 1) => -1
(/ 4) => 1/4
   求最大,最小数max, min
(max 1 2 3 4 5) => 5
(min 1 2 3 4 5) => 1
    就绝对值abs, 3:字符型 字符型,用前缀#/开始,如#/c, #/b是c,b的字符,非打印字符,可以在前缀后面加描述名,如#/newline, #/tab, #/space 字符间的比较谓词:char=?, char?, char>=?.
(char=? #/a #/a) => #t
(char? #/a) #t
(char>=? #/a #/b) => #f
   如果要它为大小写不敏感的比较,只需用用char-ci代替char就可以,如
(char-ci=? #/a #/A) => #t
    大小写字符转换 char-downcase 和char-upcase
4:符号型
    呵呵,这个符号名,有些类似枚举型,就是起个名字而已,不需要用他的数值含义,仅仅需要用这个的符号,也就是名字的含义而已。,比如red, blue,偶们不需要知道他red,blue各自的数据具体是多少,仅仅需要知道red代表红死,blue代表蓝色就够了 符号的定义用quote来定义的(quote red)当然,这个用的非常频繁,为了简化起见,有个简单的定义,就是加个'如'blue 下面介绍几个用于符号类型的过程symbol?测试是否为符号型,eqv?测试两个符号类型值是否相等,注意,这个是不区别大小写的。
(symbol 'red) => #t
(symbol 123) => #f
(eqv? 'red 'RED) => #t
(eqv? 'red 'blue) => #f
    偶们可以用define来定义个全局变量(define abc 9),用set!来改变定义的值,注意,可以改变数据类型,如
(define abc 9) abc => 9
(set! abc #/c) abc => #/c

5:字符串
   这个不用多说了,需要说明的是它是用双引号引起来的字符串。
“hello" => "hello"
   下面,需要说明的是字符串中使用的过程/函数 string,这个函数,可以把一系列字符,绑定成字符串
(string #/h #/e #/l #/l #/o) => "hello"
string-ref,提取字符串中的特定字符,字符串从0开始计数
(define hello "Hello, world")
(string-ref hello 0) => #/H
string-append把一个字符串,添加到另外一个字符串的后面
(string-append "Hello " "world") => "Hello world"

6:向量 向量是一个序列,如字符串也是个序列,但是向量的元素类型是可以任意的
(vector 12 "Hello" #/c) => #3
(12 "Hello" #/c)

7:点对
  点对,是两个任意有序值的组合。第一个元素称为car,第二个元素称为cdr
(define x (cons 1 #t))
(car x) => 1
(cdr x) => #t

Scheme数据类型之结构体-list/structure/record

 下面举个例子,来加深一下对于record和structure的理解, 首先定义一个结构体,用define-structure命令 (define-structure (tasklist (...

高性能MySQL笔记之数据类型和scheme优化

一、数据类型优化 整体原则: 1.小的通常更好:在满足需求的前提下,尽量选择占用存储空间小的类型 2.简单就好:简单数据类型往往只需要更短的CPU周期,同时也可以减小数据库在运算时的压力 3....

Scheme语言基础之数据类型

Scheme语言是LISP语言的一个方言,

数据结构(scheme) -- 抽象数据类型(ADT) -- 图

; ================================================================================== ; 图,Graph ; 无向图...

数据结构(scheme) -- 抽象数据类型(ADT) -- 平衡二叉树(AVL-Tree)

; Balanced-binary-tree (AVL tree) ; ================================================== > (define b (...

数据结构(scheme) -- 抽象数据类型(ADT) -- 链表

; List, 链表 ;================================================================================= (defi...

Scheme简明教程3-数据类型之复合数据类型

2.1          复合数据类型 复合数据类型是以组合的方式通过组合其它数据类型数据来获得。 2.2.1     Strings 字符串类型是由字符组成的序列(不能和symbols混淆,s...

数据结构(scheme) -- 复合类型

; Composite types ; (Sometimes also referred to as Plain old data structures.) ; 数组或向量,固定长度的序列 ,Arr...

java变量数据类型运算符

  • 2016年09月26日 13:47
  • 13.05MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Scheme的数据类型
举报原因:
原因补充:

(最多只允许输入30个字)