Scheme 编程语言是一种Lisp方言,诞生于1975年,由 MIT 的 Gerald J. Sussman 和 Guy L. Steele Jr. 完成。它是现代两大Lisp方言之一;另一个方言是Common Lisp。
Scheme遵循极简主义哲学,以一个小型语言核心作为标准,加上各种强力语言工具(语法糖)来扩展语言本身。
MIT曾用Scheme作为计算机系入门课程的编程语言。计算机程序语言界著名的魔法书《计算机程序的构造和解释》(又称SICP)正是利用Scheme来解释程序设计。
历史悠久的Scheme依然活跃,拥有针对各种计算机平台和环境的实现,例如Racket、Guile、MIT Scheme、Chez Scheme等。Guile是GNU工具体系里最重要的部件之一,被许多自由软件和开源软件作为内置脚本语言使用。
在Scheme 语言作为脚本语言,能够很快的对代码进行编译,无需复杂的检查变量以及函数或者方法的类型,而且对于这种函数式编程,逻辑思路也是非常的明确。在我初步学习的过程中只是利用了java jdk中的kawa工具包进行简单的函数式编程

     Scheme语言在实际中的用途也是比较多的,在我们的图形编辑软件GMIP中广泛应用,在GMIP中以Scheme作为脚本语言应用非常广泛。

1、一些Scheme的基本用法

(1)cons:把元素加到链表里;(cons 1 '(2 3 4 5)),有两个参数.

(2)quote:引用用来阻止记号被求值,它是用来用符号或者表原封不动的传递给程序,而不是求值之后传递,由于用的次数很多,被记为 ’ ,例如,(+ 2 3)会被求值为5,然而(quote (+ 2 3))则向程序返回(+ 2 3)本身。’(+ 2 3)代表列表(+ 2 3)本身

(3)append:把两个或多个链表组成一个链表;(append '( 1 2) '(3 4))  return (1 2 3 4)

(4)list:把两个或多个链表连成一个链表;(list '(1 2) '(3 4)) return ((1 2) (3 4))

(5)lambda:用于定义过程。lambda需要至少一个的参数,第一个参数是由定义的过程所需的参数组成的表。lambda的语句体都是隐式的begin代码结构

(6) let:用于定义局部变量,格式 (let binds body),变量的作用域scope为body体,[binds] → ((p1 v1) (p2 v2) ...)

(7)map:映射是将同样的行为应用于表所有元素的过程。R5RS定义了两个映射过程:其一为返回转化后的表的map过程,另一为注重副作用的for-each过程:(mapprocedure list1 list2 ...)

(8)apply:是将一个过程应用于一个表。此函数具有任意多个参数,但首参数和末参数分别应该是一个过程和一个表

(9)cond:类似于C语言的的case操作,(cond ((测试) 操作) … (else 操作))

(10)and:and后可以有多个参数,只有它后面的参数的表达式的值都为#t时,它的返回值才为#t,如果表达式的值都不是boolean型的话,返回最后一个表达式的值> (and #t 5) 5

2、Scheme中数据类型

Scheme提供了大量通用的数据类型,整数,浮点数,复数,有理数,字符串,布尔变量,散列,数组,矢量,点对,和列表。本次主要研究后几种数据结构。

(1)首先是点对,比如(1,2)是一个点对,一个点对包含两个指针,每个指针指向一个值。我们用函数cons构造点对。比如说(cons 1 2)就构造出点对(1 . 2)。因为点对总是又函数cons构造,点对又叫做cons cell。点对左边的值可以用函数car取出来,右边的值可以由函数cdr取出来。

如果一个点对右边不是一个值,而是一个指针,指向另外一个列表,我们就得到了列表。比如下面的图表示列表(1 2 3 4),实际上由点对构成:(1 . (2 . (3 . 4. ‘())。可以看出,列表本质是单向链表,图示如下:



Scheme 语言 编程思想上相关推荐

  1. Scheme 语言 编程思想下

    在上篇的基础上介绍几种Scheme重要的用法 1.lambda: lambda操作符定义一个匿名函数.比如(lambda (x) (* 2 x))定义了一个函数,返回参数x的倍数.操作符lambda后 ...

  2. r语言 悲观剪枝_【R语言新书】前言Ⅲ—R语言编程思想

    张敬信:我的R语言新书信息汇总​zhuanlan.zhihu.com 0.3 R 语言编程思想 0.3.1 面向对象 R 是一种基于对象的编程语言,即在定义类的基础上,创建与操作对象:数值向量.函数. ...

  3. 电路板必须用c语言编程吗,上大学才知道绿油油的板子叫PCB,如何成为一名电子工程师...

    原标题:上大学才知道绿油油的板子叫PCB,如何成为一名电子工程师 本文为十周年征文来稿,活动还在就行中欢迎烧友们拉到文章底部了解参加 对活动有疑问欢迎联系小助手(微信:XM1007721171) 我是 ...

  4. java NumberPad实现_JAVA语言编程思想

    在我们所学的语言中,有些是面向过程的,分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.我们所熟悉的C便是典型面向过程的语言.而此外,还有一种是面向对象 ...

  5. c语言编程思想的题目,c语言方面毕业设计选题范文.docx

    c语言方面毕业设计选题范文 c语言方面毕业设计选题 篇一:C语言课程设计选题 C语言课程设计 一.设计要求与设计报告 设计要求 1.任意选定以下一个题目,限3人选的题目可由1-3人完成(用*表示) 2 ...

  6. C语言中的类模拟(C++编程思想)

     在面向对象的语言里面,出现了类的概念.这是编程思想的一种进化.所谓类:是对特定数据的特定操作的集合体.所以说类包含了两个范畴:数据和操作.而C语言中的struct仅仅是数据的集合. 1.实例:下面先 ...

  7. 《C语言编程魔法书:基于C11标准》——第一篇 预备知识篇 第1章 C魔法概览1.1 例说编程语言...

    本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第1章,第1.1节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 预备 ...

  8. r语言 悲观剪枝_《R语言编程—基于tidyverse》新书信息汇总

    我之前预告过的 R 语言新书,起名为<R语言编程-基于tidyverse>,本书的目的是为了在国内推广 R 语言和 R 语言最新技术,电子版将始终跟踪最新并免费分享.本书非常适合新手 R ...

  9. c语言编程心得,C语言编程心得

    记录这些是为了日后自己想查阅以前经验的方便,同时若能给其他网友带来一些帮助,就更好了~ C语言,自己经常遇到的问题: 1.段错误 段错误一般是由于访问了不存在的地址造成的,具体的原因有文件路径不存在, ...

  10. mysql 小球_c语言编程实例——小球跳动

    1.预备知识 1.1 相关头文件 "#include"是c语言中用以申明所需调用的库函数或自定义函数的头文件路径及文件名.#include ""和#includ ...

最新文章

  1. 面试常考,项目易错,长文详解C/C++中的字节对齐
  2. JS实现表格列宽拖动
  3. (转载)IE 浏览器的创新
  4. python3 转换json数据的单引号双引号注意点
  5. 函数计算支持 MySQL 实例绑定
  6. 在清华听演讲系列音频下载地址收集
  7. OpenID Connect:OAuth 2.0协议之上的简单身份层
  8. 月薪多少才算80后中的人生赢家?他们的经济、婚姻、生活方式是怎样的
  9. c语言ue,小话C语言中的cotinue和break
  10. 基于Python的ModbusTCP客户端实现
  11. NET 自定义配置文件 Configuration
  12. include vector 编译出错VC++
  13. java------io基础(一)
  14. android o系统字体下载,fonts软件安卓下载-fonts字体 安卓版v4.0.0-PC6安卓网
  15. 【系统分析师之路】2012年上系统分析师下午论文真题
  16. jBridge避开云服务器让AI算力落地的桥联框架技术
  17. matlab读取txt文件
  18. JS-获取当前URL的参数
  19. wekan 工具配置
  20. JPA Specification 自定义查询

热门文章

  1. 出现了一些错误,请尝试重启Geforce Experience
  2. GeForce Experience 绕过登录与禁止自动更新
  3. 接入网+承载网+核心网
  4. 剖析锂电池的工作原理
  5. hp服务器改系统启动项,hp笔记本如何进入bios修改启动项
  6. 准备一个月,考过软件系统架构师
  7. js截取视频第一帧_学学javascript如何截取视频第一帧
  8. linux ssh权限设置,linux 让ssh只允许指定的用户登录的权限设置
  9. 洛谷P2466 [SDOI2008] Sue 的小球 题解
  10. 【西语】【1】Te amor 我爱你