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语言基础之数据类型相关推荐

  1. Go语言基础之数据类型

    Go语言基础之数据类型 Go语言中有丰富的数据类型,除了基本的整型.浮点型.布尔型.字符串外,还有数组.切片.结构体.函数.map.通道(channel)等.Go 语言的基本类型和其他语言大同小异. ...

  2. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个.1>.数据类型关键字(12个)char,sh ...

  3. C语言基础专题 - 数据类型与强制类型转换(编辑中)

    C语言 - 数据类型与强制类型转换 1.C数据类型 可以参考的相关知识链接: C语言基础专题 - 指针 C语言基础专题 - 数组 C语言基础专题 - 字符串 C语言基础专题 - 结构体 C语言基础专题 ...

  4. java语言基础与go语言基础,数据类型区别

    一:数据类型 1.java语言的数据类型 (1)整数类型 int 数据类型是32位.有符号的, 4个字节,以二进制补码表示的整数: 最小值是 -2,147,483,648(-2^31): 最大值是 2 ...

  5. 1.3 Go语言基础之数据类型

    Go语言中有丰富的数据类型,除了基本的整型.浮点型.布尔型.字符串外,还有数组.切片.结构体.函数.map.通道(channel)等.Go 语言的基本类型和其他语言大同小异. 一.整型 1.1 基本类 ...

  6. c语言字符型数据怎么输入输出,C语言基础之数据类型与输入/输出

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 常用的进位制 R进制数只采用R个基本数字符号,R称为数制的基数,数制中每一固定位置对应的单位值称为权,进位原则是逢R进1 ...

  7. c语言复杂数据类型存储,C语言基础-复杂数据类型

    指针 指针是C语言中用的最多的一个知识点,它是用来储存地址的,储存地址的这个变量就成为指针. 屋子上面的门牌号就相当于指针(地址),屋子里的空间就相当于内存. 指针与字符串 定义字符串的两种方式: 1 ...

  8. 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)

    1. Java语言主要由5中符号组成 标识符:数字.字母.美元符.下划线(注意不能数字开头) 关键字(被Java赋予特殊意义的单词,注意所有关键字都是小写):   goto和const保留了它们,但是 ...

  9. 【C语言基础】-数据类型大小

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.基本数据类型 整型 字符型 实型(浮点型) 二.构造数据类型 数组类型 结构体类型 结构体匿名声明 结构体对齐方式 ...

  10. Go语言基础 基本数据类型使用

    变量的定义以及使用 golang 变量使用的细节 第一种:指定变量类型,声明后若不赋值 使用默认值 package main import ("fmt" ) func main() ...

最新文章

  1. JavaScript cookie
  2. python 交互图形 bokeh学习总结
  3. 手机录音失真_“手机都能录音,还要啥录音笔”,四点原因让说这话的人啪啪打脸...
  4. 2016二级c语言笔试内容,2016年计算机二级c语言笔试试题「最新」
  5. ORACLE 定时执行存储过程
  6. 开机出现“CPU fan error
  7. 驱动开发:BSOD 0x93蓝屏 无效句柄
  8. 论文解读:Structural Optimization Makes Graph Classification Simpler and Better
  9. JAVA Map类compute方法详解及样例
  10. 2022哈尔滨工程大学软件工程上岸经验贴
  11. ASP网站实例教程:IIS安装配置
  12. 2020 高考英语高频短语
  13. 【线刷大师】纯净root线刷包,线刷教程及工具
  14. 获取Android设备的方向 ,使用加速度重力传感器
  15. node.js开源文件服务器,本地node.js服务器搭建
  16. NFT是什么?一篇文章搞懂NFT的概念
  17. python新闻评论分析_Python文本数据分析与处理(新闻摘要)
  18. SyntaxError: Unexpected end of JSON input (file: C:\Users\admin\Desktop\...)
  19. 魔兽争霸war3:模型相关细节介绍
  20. 计算机专业自考参考文献,自考计算机专著类参考文献 自考计算机核心期刊参考文献有哪些...

热门文章

  1. 中国大学MOOC-陈越、何钦铭-数据结构-起步能力自测题
  2. Unity3d UI自适应之Canvas Scaler详细说明和测试项目源码
  3. gmap 支持python吗_在gmap中使用bokeh的python为for circle添加工具提示
  4. java seek_java中seek()的用法,seek和seekfor有什么区别
  5. 如何取消html5微信页面授权,微信授权管理在哪里?查看微信授权过的第三方应用并取消授权的方法图解...
  6. Linpack安装、配置与运行
  7. java设计模式笔记
  8. OSChina 周五乱弹 —— 回家切记关机
  9. 迈瑞医疗前三季归母净利81亿:同比增21.6% 营收233亿
  10. Ubuntu系统中文输入法配置安装(谷歌拼音)