Scheme 语言概要(上)
scheme

guile> (define name "tomson") guile> name "tomson" guile> (string-length name) ; 取字符串的长度 6 guile> (string-set! name 0 #\g) ; 更改字符串首字母(第 0 个字符)为小写 字母 g (#\g) guile> name "gomson" guile> (string-ref name 3) ; 取得字符串左侧第 3 个字符(从 0 开始) #\s
作为 Lisp 变体,Scheme 是一门非常简洁的计算语言,使用它的编程人员可以 摆脱语言本身的复杂性,把注意力集中到更重要的问题上,从而使语言真正成为 解决问题的工具。本文分为上、下两部分来介绍 scheme 语言。
一.Scheme 语言的特点
Scheme 语言是 LISP 语言的一个方言(或说成变种),它诞生于 1975 年的 MIT,对 于这个有近三十年历史的编程语言来说,它并没有象 C++,java,C#那样受到商 业领域的青睐,在国内更是显为人知。但它在国外的计算机教育领域内却是有着 广泛应用的,有很多人学的第一门计算机语言就是 Scheme 语言。
从上面的操作中可以看出来,只要 not 后面的参数不是逻辑型,其返回值均为#f。
数字型(number)
它又分为四种子类型:整型(integer),有理数型(rational),实型(real),复 数型(complex);它们又被统一称为数字类型(number)。
scheme中文教程

C. HANSON
K. M. PITMAN
M. WAND
谨以此纪念 Robert Hieb
1998 年 2 月 20 日
摘要
本报告给出程序设计语言 Scheme 的定义性描述。 Scheme 是 Lisp 程序设计语言的方言,由 Guy Lewis Steele Jr. 和 Gerald Jay Sussman 发明,具有静态作用域和严格尾递归 的特点。它的设计目标是拥有异常清晰、简明的语义和较 少的表达式异构方式。包括命令式、函数式和消息传递式 风格在内的绝大多数程序设计模型都可以用 Scheme 方便 地表述。
whitespace 6 with-input-from-file 32 with-output-to-file 32 write 33; 13 write-char 33
#x 19; 35
zero? 20
Index 47
算法语言 Scheme 修订5报告
王咏刚 试译 v 0.9.5
RICHARD KELSEY, WILLIAM CLINGER, AND JONATHAN REES (编者)
第 7 章用扩展 BNF 给出了 Scheme 语言的形式语法,并为 其定义了形式指称语义。形式语法和语义后面有一个使用 Scheme 语言的示例。
本报告的最后是参考文献列表和依字母顺序排列的索引。
目录
概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1 Scheme 概论 . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
#t 23 tail call 尾调用 7 tan 21 token 记号 34 top level environment 最高层环境 16; 6 transcript-off 34 transcript-on 34 true 7; 10, 23 truncate 21 type 类型 7
scheme如何记忆

Scheme如何记忆Scheme语言是一种基于Lisp的函数式编程语言,具有简洁、优雅的语法和强大的表达能力。
对于初学者来说,Scheme的记忆可能是一个挑战。
然而,通过一些技巧和方法,我们可以更容易地掌握Scheme语言的特点和用法。
了解Scheme的基本概念在学习Scheme语言之前,需要了解一些基本概念。
首先,Scheme是一种基于符号表达式的语言,它以括号表达式(S表达式)作为语法基础。
另外,Scheme是一种函数式编程语言,函数在Scheme中被视为一等公民,可以像其他数据一样进行操作。
掌握Scheme的数据结构Scheme中最基本的数据结构包括数字、字符串、布尔值和列表。
数字可以是整数或实数,字符串用双引号括起来,布尔值为#t和#f,表示真和假。
列表是Scheme中最常用的数据结构,使用括号括起来,元素之间用空格分隔。
熟悉Scheme的基本语法了解Scheme的基本语法是记忆Scheme的关键。
在Scheme中,括号是用于表示函数应用和代码块的重要符号。
每个括号表达式由一个操作符和零个或多个操作数组成,操作符的位置在最左边。
理解Scheme的函数定义和调用函数在Scheme中使用define关键字进行定义,使用lambda关键字表示匿名函数。
函数调用的语法是将函数名放在括号中,后面跟着参数列表。
调用函数时,Scheme采用应用序求值规则,即先求值参数,然后将其传递给函数。
探索Scheme的递归和高阶函数递归是函数式编程的重要特性,Scheme语言天生支持递归。
通过递归,我们可以实现对数据结构的高效处理。
此外,Scheme还支持高阶函数,即可以接受函数作为参数或返回函数的函数,这种特性使得Scheme可以实现更为灵活和抽象的编程。
深入了解Scheme的惰性求值Scheme是一种惰性求值语言,它仅在需要时才求值表达式。
这种特性可以提高程序的效率和简洁性,但也需要注意避免潜在的副作用。
了解Scheme的惰性求值规则有助于更好地理解和记忆Scheme的行为。
scheme语法

Scheme是一种函数式编程语言,其语法主要包括以下几个部分:
1. 表达式:Scheme的基本语法结构是由一系列的表达式组成,每个表达式都被一对括号包围。
一个基
本的表达式由一个操作符和零个或多个操作数组成。
例如,(+ 1 2)表示对1和2进行求和,"+"是操作符,"1"和"2"是操作数。
2. 数据类型:Scheme中有多种数据类型,包括整数、浮点数、布尔值、字符、字符串以及列表等。
例
如,'(1 2 3)表示一个包含三个整数元素的列表。
3. 函数:在Scheme中,函数是一等公民,可以作为其他函数的参数和返回值。
函数可以通过lambda表
达式定义,例如,(lambda (x y) (+ x y))表示一个接受两个参数x和y,返回它们的和的函数。
4. 变量:在Scheme中,变量用于存储值,可以使用赋值语句来给变量赋值。
例如,(define x 10)表示
将变量x的值设置为10。
5. 控制结构:Scheme的控制结构包括条件语句、循环语句等。
例如,(if <condition> <true-
expression> <false-expression>)表示当条件为真时执行true-expression,否则执行false-
expression。
6. 宏:Scheme允许使用宏定义自己的语法结构。
宏可以用来简化复杂的语法结构或者扩展语言的语
法。
以上是Scheme语法的一些基本组成部分,更多详细信息可以查阅Scheme的教程或者相关书籍。
数据库中的Schema是什么?

数据库中的Schema是什么?翻译自:在数据库中,schema(发音“skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas and schemata都可以作为复数形式。
模式中包含了schema对象,可以是表(table)、列(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key)等。
数据库模式可以用一个可视化的图来表示,它显示了数据库对象及其相互之间的关系以上是模式图的一个简单例子,显示了三个表及其数据类型、表之间的关系以及主键和外键,以下是数据库模式的一个更复杂的例子。
在这种情况下,模式图分为四个部分:(1)Customer Data(客户数据):与客户有关的数据,如姓名,地址等(2)Business(业务):业务所需的数据,例如员工,商店位置,付款细节等(3)Inventory(库存):所有产品的细节。
在这里,产品是电影,所以它包含电影标题,类别,演员等数据。
(4)Views(视图):关于用于评估的数据的特别观点,所以通过这些模式图,我们可以进一步创建一个数据库,实际上,MySQL Workbench允许我们直接从图中生成一个Create Table脚本,然后我们就可以直接用这个脚本去创建一个数据库,还可以直接将一个数据库转换为一个关系图表。
Schema和DataBase是否等同?涉及到数据库的模式有很多疑惑,问题经常出现在模式和数据库之间是否有区别,如果有,区别在哪里。
取决于数据库供应商对schema(模式)产生疑惑的一部分原因是数据库系统倾向于以自己的方式处理模式(1)MySQL的文档中指出,在物理上,模式与数据库是同义的,所以,模式和数据库是一回事。
(2)但是,Oracle的文档却指出,某些对象可以存储在数据库中,但不能存储在schema中。
LISP语言教程(1)

(quote x)返回x.为了可读性我们把(quote x)简记为'x.
> (quote a)
a
> 'a
a
> (quote (a b c))
(a b c)
atom
(atom x)返回原子t如果x的值是一个原子或是空表,否则返回().在Lisp中我们按惯例用原子t表示真,而用空表表示假.
> (atom 'a)
(cond ((atom z)
(cond ((eq z y) x)
('t z)))
('t (cons (subst x y (car z))
(subst x y (cdr z))))))
偶然地我们在这儿看到如何写cond表达式的缺省子句.第一个元素是't的子句总是会成功的.于是
(cond (x y) ('t z))
等同于我们在某些语言中写的
if x then y else z
一些函数
既然我们有了表示函数的方法,我们根据七个原始操作符来定义一些新的函数.为了方便我们引进一些常见模式的简记法.我们用cxr,其中x是a或d的序列,来简记相应的car和cdr的组合.比如(cadr e)是(car(cdr e))的简记,它返回e的第二个元素.
示例
假设我们要定义函数(subst x y z),它取表达式x,原子y和表z做参数,返回一个象z那样的表,不过z中出现的y(在任何嵌套层次上)被x代替.
> (subst 'm 'b '(a b (a b c) d))
(a m (a m c) d)
我们可以这样表示此函数
(label subst (lambda (x y z)
语言学imageschema定义

语言学imageschema定义
Image schema是认知语言学的一个概念,指的是在人类认知中普遍存在的一类基本、抽象的心理图像或经验模式。
这些模式在我们学习和使用语言时发挥着重要的作用。
Image schema可以被看作是人类认知的基本构建模块,用于描述和理解一系列的概念、动作、空间关系和情感。
它们可以在不同的语言和文化中具有共同的特征,因此对于翻译、跨文化交流和语言习得等方面有着重要的意义。
常见的一些image schema包括:前后(source-path-goal)形式,指的是我们对运动和方向感的认知;容器(container)形式,指的是我们对物体在空间中的包裹、遮挡和填充的认知;边界(boundary)形式,指的是我们对空间和概念边界的认知等等。
Image schema的概念来源于认知科学和认知心理学领域的研究,通过对形式和物质之间的联系进行建模,进一步揭示了语言和认知之间的紧密关系。
在语言学研究中,image schema的理论框架被用来解释语言的结构、意义和使用方式等方面的问题。
scheme语言

scheme语言
Scheme是一种函数式编程语言,它遵循Lisp编程风格,并由Gerald Jay Sussman和Guy L. Steele Jr.在1975年开发。
Scheme是一种简洁而优雅的编程语言,它具有一些特殊的特性,如动态类型、动态作用域、递归和尾递归等。
Scheme具有强大的函数和过程的支持,它允许将函数作为参数传递和返回,这种特性被称为高阶函数。
此外,Scheme还有一种强大的宏系统,允许用户定义自己的语法扩展。
与其他编程语言相比,Scheme语言的语法非常简单,它使用括号表示函数调用,并使用前缀表示法。
例如,下面是一个使用Scheme定义的函数,计算一个数的平方:
```scheme
(define (square x)
(* x x))
```
Scheme提供了许多基本的数学函数和过程,例如加法、乘法、除法等。
此外,它还提供了列表处理和递归的简便方法。
Scheme是一种高度灵活和可扩展的语言,它具有清晰的语法和简单的语义。
它被广泛应用于教学和研究领域,也被用作脚本语言和开发工具。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Scheme 语言概要(上)
宋国伟 (gwsong52@)吉林省德惠市信息中心
简介: Scheme语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++,java,C#那样受到商业领域的青睐,在国内更是显为人知。
但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是Scheme语言。
作为Lisp 变体,Scheme 是一门非常简洁的计算语言,使用它的编程人员可以摆脱语言本身的复杂性,把注意力集中到更重要的问题上,从而使语言真正成为解决问题的工具。
本文分为上、下两部分来介绍scheme 语言。
一.Scheme语言的特点
Scheme语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++,java,C#那样受到商业领域的青睐,在国内更是显为人知。
但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是Scheme语言。
它是一个小巧而又强大的语言,作为一个多用途的编程语言,它可以作为脚本语言使用,也可以作为应用软件的扩展语言来使用,它具有元语言特性,还有很多独到的特色,以致于它被称为编程语言中的"皇后"。
下面是洪峰对Scheme语言的编程特色的归纳:
∙词法定界(Lexical Scoping)
∙动态类型(Dynamic Typing)
∙良好的可扩展性
∙尾递归(Tail Recursive)
∙函数可以作为值返回
∙支持一流的计算连续
∙传值调用(passing-by-value)
∙算术运算相对独立
本文的目的是让有编程基础(那怕是一点点)的朋友能尽快的掌握Scheme语言的语法规则,如果您在读完本文后,发现自己已经会用Scheme语言了,那么我的目的就达到了。
二.Scheme语言的标准与实现
R5RS (Revised(5) Report on the Algorithmic Language Scheme)
Scheme语言的语法规则的第5次修正稿,1998年制定,即Scheme语言的现行标准,目前大多数Scheme 语言的实现都将达到或遵循此标准,并且几乎都加入了一些属于自己的扩展特色。
Guile (GNU's extension language)
Guile是GNU工程的一个项目,它是GNU扩展语言库,它也是Scheme语言的一个具体实现;如果你将它作为一个库打包,可以把它链接到你的应用程序中去,使你的应用程序具有自己的脚本语言,这个脚本语言目前就是Scheme语言。
如此,即可以执行命令guile,进入guile>提示符状态,输入调试Scheme程序代码了,本文的所有代码都是在guile下调试通过。
其它实现
除了Guile外,Scheme语言的实现还有很多,如:GNU/MIT-Scheme,SCI,Scheme48,DrScheme 等,它们大多是开源的,可以自由下载安装使用,并且跨平台的实现也很多。
你会发现既有象basic的Scheme语言解释器,也有将Scheme语言编译成C语言的编译器,也有象JAVA那样将Scheme语言代码编译成虚拟机代码的编译器。
三.基本概念
一个form 也可以是一个表达式,一个变量定义,也可以是一个过程。
form嵌套
Scheme语言中允许form的嵌套,这使它可以轻松的实现复杂的表达式,同时也是一种非常有自己特色的表达式。
下图示意了嵌套的稍复杂一点的表达式的运算过程:
变量定义
可以用define来定义一个变量,形式如下:
(define 变量名值)
如:(define x 123) ,定义一个变量x,其值为123。
更改变量的值
可以用set!来改变变量的值,格式如下:
(set! 变量名值)
如:(set! x "hello") ,将变量x的值改为"hello" 。
Scheme语言是一种高级语言,和很多高级语言(如python,perl)一样,它的变量类型不是固定的,可以随时改变。
四.数据类型
从上面的操作中可以看出来,只要not后面的参数不是逻辑型,其返回值均为#f。
数字型(number)
它又分为四种子类型:整型(integer),有理数型(rational),实型(real),复数型(complex);它们又被统一称为数字类型(number)。
如:复数型(complex) 可以定义为(define c 3+2i)
实数型(real)可以定义为(define f 22/7)
有理数型(rational)可以定义为(define p 3.1415)
整数型(integer) 可以定义为(define i 123)
Scheme语言中,数字类型的数据还可以按照进制分类,即二进制,八进制,十进制和十六进制,在外观形式上它们分别以符号组合#b、#o、#d、#x 来作为表示数字进制类型的前缀,其中表示十进制的#d 可以省略不写,如:二进制的#b1010 ,八进制的#o567,十进制的123或#d123,十六进制的#x1afc 。
Scheme语言的这种严格按照数学定理来为数字类型进行分类的方法可以看出Scheme语言里面渗透着很深的数学思想,Scheme语言是由数学家们创造出来的,在这方面表现得也比较鲜明。
字符型(char)
Scheme语言中的字符型数据均以符号组合"#\" 开始,表示单个字符,可以是字母、数字或"[ ! $ % & * + - . / : %lt; = > ? @ ^ _ ~ ]"等等其它字符,如:
#\A 表示大写字母A,#\0表示字符0,
其中特殊字符有:#\space 表示空格符和#\newline 表示换行符。
符号型(symbol)
符号类型是Scheme语言中有多种用途的符号名称,它可以是单词,用括号括起来的多个单词,也可以是无意义的字母组合或符号组合,它在某种意义上可以理解为C中的枚举类型。
看下面的操作:
字符串中出现引号时用反斜线加引号代替,如:"abc\"def" 。
点对(pair)
我把它译成"点对",它是一种非常有趣的类型,也是一些其它类型的基础类型,它是由一个点和被它分隔开的两个所值组成的。
形如:(1 . 2) 或(a . b) ,注意的是点的两边有空格。
这是最简单的复合数据类型,同是它也是其它复合数据类型的基础类型,如列表类型(list)就是由它来实现的。
按照Scheme语言说明中的惯例,以下我们用符号组合"=>" 来表示表达式的值。
它用cons来定义,如:(cons 8 9) =>(8 . 9)
其中在点前面的值被称为car ,在点后面的值被称为cdr,car和cdr同时又成为取pair的这两个值的过程,如:
由上可见,a本来是我们上面定义的点对,最后形成的却是列表。
事实上列表是在点对的基础上形成的一种特殊格式。
再看下面的代码:
上在的操作中用到的cadr,cdddr等过程是专门对PAIR型数据再复合形成的数据操作的过程,最多可以支持在中间加四位a或d,如cdddr,caaddr等。
下图表示了由pairs定义形成的列表:
这个列表可以由pair定义为如下形式:
Scheme语言在类型定义中有比较严格的界定,如在C语言等一些语言中数字0来代替逻辑类型数据False,在Scheme语言中是不允许的。
在Scheme语言中如此众多的类型判断功能,使得Scheme语言有着非常好的自省功能。
即在判断过程的参数是否附合过程的要求。
算术运算
五.过程定义
此时过程add只在fix过程内部起做用,这事实上涉及了过程和变量的绑定,可以参考下面的关于过程绑定(let,let* 和letrec)的介绍。
过程是初学者难理解的一个关键,随着过程参数的增加和功能的增强,过程的内容变得越来越复杂,小括号也会更多,如果不写出清晰的代码的话,读代码也会成为一个难题。
熟悉了scheme 基本概念、数据类型和过程(函数)后,下一部分我们来学习scheme 的结构、递归调用和其他扩展功能。