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)
- 类型转换:(原类型-新类型 对象)
- 类型转换方式非常自由:
(symbol->string ’symbol) => "symbol"
尤其是这个:
(string->list "hello") => (#\h #\e #\l #\l #\o)
No comments:
Post a Comment