September 26, 2006

Scheme学习笔记(一)

(写这个文档并非我初学Scheme,只是为开始全面使用它作点复习准备)

一. HelloWorld
  • Scheme语法即抽象语法树,只有仅有的几个内部语法支持。
  • ;开启一行注释
  • 用括号进行文法定界,第一项为操作,空格(换行)分割操作对象,如:
(diplay "hello, world!")
即对"hello, world!"字符串进行 display 操作。
  • Scheme和Lisp一样是自描述的,脚本用 .scm 作为后缀,进入解释器后,使用(load "文件名字符串")启动程序,用(exit)退出解释器。
  • 完整程序:
(begin (display "hello, world!") (newline));newline用来刷新缓存

二. 数据类型
1. 简单类型
  • 布尔值:有两个取值,#t和#f
  • 操作(类型名? 变量)返回一个布尔值,确认该变量是否为此类型。如:
(boolean? #t) => #t
(boolean? 32) => #f
  • 宏(not 布尔值)返回这个布尔值的反取值。如:
(not (boolean? #t)) => #f
  • 数字:分为complex,rational,real,integer,但申明时不必指出。
  • (= 操作对象1 操作对象2)操作仅用于比较类型相同的变量值是否相同;(= 43 43) => #t,但(= 43 "ok")会报错。
  • (eqv?)操作是(=)的范型版本
  • 指数运算(expt 2 3) => 8,取绝对值(abs -7) => 7
  • 字符:以#\开头的单个字符
(char=? #\a #\a) ? #t
(char=? #\a #\b) ? #f
  • 忽略大小写比较:(char-ci=? #\a #\A) => #t
  • 大小写转换(不影响原值)(char-downcase #\A) => #\a,(char-upcase #\a) => #\A
  • 符号:编译原理中的东西,可作变量名,用(quote)申明,(quote a) => 'a
  • 变量不与其类型绑定:
(quote abc) (define xyz 9) (set! xyz #\c)

No comments: