September 27, 2006

Scheme学习笔记(二)

(都忘了说了,我复习用的教材是Teach Yourself Scheme in Fixnum Days,还有一本The Scheme Programming Language也很好,但太长,没看过)

2. 复合类型

比较谓词:
(eqv?   (list 'a) (list 'a)) ; 它们 "看起来一样",
;()
(eq? (list 'a) (list 'a)) ; 存储在不同的内存单元中。
;()
(equal? (list 'a) (list 'a))
;#t
  • 字符串:申明(define str "This is a string.")
  • 用字符申明:(string #\h #\e #\l #\l #\o) => "hello"
  • (string-ref 字符串 位置(整数))返回字符串该位置上的字符
  • (string-append "E " "Pluribus " "Unum") => "E Pluribus Unum"
  • 改变字符串(重新赋值)(string-set!)
  • (string-length "mumble") => 6
  • 向量(貌似数组):值以"#"开头
  • 申明(vector 0 1 2 3 4) => #(0 1 2 3 4)或(make-vector 长度)
  • 对(不知道怎么翻译pairs这个词~~)
  • 分为左右值,左值叫car,右值叫cdr,用他们作操作符获取左右值
  • 申明(cons 左值 右值)
  • (cons 1 #t) => ’(1 . #t)
  • (set-car!),(set-cdr!)
  • 重要!经常右值套嵌!(cons 1 (cons 2 (cons 3 (cons 4 ’()))))形成list:(list 1 2 3 4)
  • list(太有名,懒得翻译)
  • list操作:取值(list-ref)
  • list-tail 通过除去前面的 n 个元素来获得一个子表
  • 添加元素(append)
  • (null?) 检查它的操作对象是否是空表。
  • 长度(length)
  • member 和 memq 将返回它的 car 是一个指定元素的一个子表。
  • 查找(assoc 'LittleBear '((HappyMole vampire) (LittleBear banshee) (LittleTiger troll))) => (LittleBear banshee)
  • 类型转换:(原类型-新类型 对象)
  • 类型转换方式非常自由:
(string->number "16") => 16
(symbol->string ’symbol) => "symbol"
尤其是这个:
(string->list "hello") => (#\h #\e #\l #\l #\o)

No comments: