我是靠谱客的博主 甜美保温杯,最近开发中收集的这篇文章主要介绍Scheme语言基础之数据类型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Scheme语言是LISP语言的一个方言,是一门小巧的语言,在科学研究领域有重要的作用,机器学习,人工智能都是Scheme派上用场的地方,使用Scheme可以让程序员不用为了语法而分心,可以专注于程序的算法逻辑上。学习Scheme的人应该都是从SICP开始的,这本书没有过多讲解Scheme的语法,而是集中介绍Scheme中核心的数据结构和如何用Scheme的思想来表达出自己想要的程序,这方面应该另外通过其他途径获取。

一下就介绍一下Scheme的基本用法:

Scheme是一门动态类型的语言,如pyrhon,perl一样,可以写成脚本,通常Scheme脚本都是以

#!/usr/local/bin/guile -s

!#

开始,Scheme程序可以在guile下编译,调试。

定义变量使用的语法行如

(define 变量名 值)

例如(define x 3)则定义了变量x,绑定到3。而如果想更改x的值可以使用set!,

(set! x 6)

当然你不仅可以把其他整数值赋予x,同样也可以用有理数,字符,字符串赋值,应为Scheme是动态类型,所以赋值的类型就决定了x的类型。

Scheme的数据类型包含了数学中的基本类型,因为Scheme是由数学家创造的,所以跟数学很接近。

boolean类型的:#f和#t,对这个类型的操作只有 not,例如

(not #f) 返回#t

数字型包括整形,有理型,实数和复数,进制的表示形式为#x,#o,#b,#d分别为十六进制,八进制,二进制,十进制,可以发现Scheme中大量使用#。

Scheme语言中的字符型数据均以符号组合 "#" 开始,表示单个字符。特殊字符有:#space 表示空格符和 #newline 表示换行符。

Scheme中定义了符号变量,以’开始,例如’hello就定义了符号hello,感觉符号变量就像C++中的字符串字面量。对于字符串,则有很多已经定义好的过程可以使用,例如string-length返回字符串的长度,string-set!设置字符,string-ref返回字符的引用,

(fefine str "hello"),(string-length str),(string-set! str 2 #a),(string-ref str 2),则分别就是取str的长度,设置第3个字符为a,返回第3个字符的引用。

点对是Scheme中最重要的结构了,也是SCIP中重点介绍的,应为由点对可以组合成任意复杂的数据结构。点对由cons定义,如(cons 1 2)则生成(1 , 2),取得和设置第一个元素的过程是car,set-car!,同理,若操作第二个元素,则使用cdr,set-cdr!.

说了点对后就应该说list了,list是用的最多的了,定义列表为(define l (list 1 2 3)),列表由形如string一样的操作过程,即list-length,list-ref,list-set!.列表是由点对形成的,前面定义的(1 2 3)也可以表达为(define l (cons 1 (cons 2 (cons 3 '() ))),’()代表NULL。

列表过后就是向量了,定义向量的方式和列表一样,只需将list换成vector即可,(define v (vector 1 2 3)),表示为#(1 2 3),操作向量的过程也和列表类似。向量的索引也是从0开始的。

有了数据结构了,就需要一些过程来辅助数据结构的使用,C语言中有if,Scheme中判断是用类型名加问号再加相应的常量或变量构成,

(char? #g)就判断字符g是否为字符类型。其他类型还有boolean,integer,real,number,rational,symbol,null.

eq?,eqv?和equal?是三个判断两个参数是否相等的过程,其中eq?和eqv?的功能基本是相同的.eq?是判断两个参数是否指向同一个对象,equal?则是判断两个对象是否具有相同的结构并且结构中的内容是否相同,它用eq?来比较结构中成员的数量;equal?多用来判断点对,列表,向量表,字符串等复合结构数据类型。

Scheme中的算术运算有+ , - , * , / 和 expt (指数运算),->表明类型转换。

以上都是基本的功能,有了这些基本的功能后就可以取定义复杂的过程了,过程相当于C语言中的函数,不过这里过程和数据有一样的地位,也就是说过程可以做参数,返回值,可以赋值,这也就是Scheme为什么称为函数式语言的原因了。

过程可以使用define和lambda来定义,形如(define 过程名 ( lambda (参数 ...) (操作过程 ...)))。例如

(define add5 (lambda (x) (* x 5)))就定义了乘以5的过程。

最后

以上就是甜美保温杯为你收集整理的Scheme语言基础之数据类型的全部内容,希望文章能够帮你解决Scheme语言基础之数据类型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部