LISP语言教程
LISP语言教程
作者:牛魔王上次修改时间描写山水的诗: 2007-03-22 13:13
Scheme 语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++javaC#那样受到商业领域的青睐,在国内更是显为人知。但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是Scheme语言。
Scheme 语言概要
Author:
宋国伟 吉林省德惠市信息中心
Date:
2003 12 01
Scheme 语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++javaC#那样受到商业领域的青睐,在国内
更是显为人知。但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是Scheme语言。
作为Lisp 变体,Scheme 是一门非常简洁的计算语言,使用它的编程人员可以摆脱语言本身的复杂性,把注意力集中到更重要的问题上,从而使语言真正成为解决问题的工具。本文分为上、 下两部分来介绍 scheme 语言。
一.Scheme语言的特点
Scheme 语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++javaC#那样受到商业领域的青睐,在国内更是显为人知。但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是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)
GuileGNU工程的一个项目,它是GNU扩展语言库,它也是Scheme语言的一个具体实现;如果你将它作为一个库打包,可以把它链接到你的应用程序中去,使你的应用程序具有自己的脚本语言,这个脚本语言目前就是Scheme语言。
Guile可以在LINUX和一些UNIX系统上运行,下面是简单的安装过程:
下载guile-1.6.4版,文件名为guile-1.6.,执行下面的命令:
tar xvfz guile-1.6.
cd guile-1.6.4
./configure
make
make install
如此,即可以执行命令guile,进入guile>提示符状态,输入调试Scheme程序代码了,本文的所有代码都是在guile下调试通过。
其它实现
除了Guile外,Scheme语言的实现还有很多,如:GNU/MIT-Scheme SCIScheme48DrScheme等,它们大多是开源的,可以自由下载安装使用,并且跨平台的实现也很多。你会发现既有象basic Scheme语言解释器,也有将Scheme语言编译成C语言的编译器,也有象JAVA那样将Scheme语言代码编译成虚拟机代码的编译器。
三.基本概念
注释
Scheme语言中的注释是单行注释,以分号[;]开始一直到行尾结束,其中间的内容为注释,在程序运行时不做处理,如:
; this is a scheme comment line.
标准的Scheme语言定义中没有多行注释,不过在它的实现中几乎都有。在Guile中就有多行注释,以符号组合"#!"开始,以相反的另一符号组合"!#"结束,其中内容为注释,如:
#!
there are scheme comment area.
you can write mulity lines here .
!#
注意的是,符号组合"#!""!#"一定分做两行来写。
Scheme用做脚本语言
Scheme语言可以象shperlpython等语言那样作为一种脚本语言来使用,用它来编写可执行脚本,在Linux中如果通过GuileScheme语言写可执行脚本,它的第一行和第二行一般是类似下面的内容:
#! /usr/local/bin/guile -s
!#
这样的话代码在运行时会自动调用Guile来解释执行,标准的文件尾缀是".scm"
(form)
(form)Scheme语言中的最小程序单元,一个泰罗奥特曼大全Scheme语言程序是由一个或多个form构成。没有特殊说明的情况下 form 都由小括号括起来,形如:
(define x 123)
(+ 1 2)
天津科技大学招生网
(* 4 5 6)
(display "hello world")
一个 form 也可以是一个表达式,一个变量定义,也可以是一个过程。
form嵌套
Scheme语言中允许form的嵌套,这使它可以轻松的实现复杂的表达式,同时也是一种非常有自己特的表达式。下图示意了嵌套的稍复杂一点的表达式的运算过程:
变量定义
可以用define来定义一个变量,形式如下:
(define 变量名 )
如: (define x 123) ,定义一个变量x,其值为123
更改变量的值
可以用set!来改变变量的值,格式如下:
(set! 变量名 )
如: (set! x "hello") ,将变量x的值改为"hello"
Scheme语言是一种高级语言,和很多高级语言(pythonperl)一样,它的变量类型不是固定的,可以随时改变。
四.数据类型
1. 简单数据类型
逻辑型(boolean)
最基本的数据类型,也是很多计算机语言中都支持的最简单的数据类型,只能取两个值:#t,相当于其它计算机语言中的 TRUE#f,相当于其它计算机语言中的 FALSE
Scheme语言中的boolean类型只有一种操作:not。其意为取相反的值,即:
(not #f) => #t
(not #t) => #f
not的引用,与逻辑非运算操作类似
guile> (not 1)
#f
guile> (not (list 1 2 3))
#f
不变的情缘
guile> (not 'a)
#f
从上面的操作中可以看出来,只要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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。