common lisp数组(Array)-字符字符串

1.数组,Array make-array 构造一个数组。 [9]> (make-array '(2 3)) #2A((NIL NIL NIL) (NIL NIL NIL)) [10]> (make-array '(3 3)) #2A((NIL NIL NIL) (NIL NIL NIL) (NIL NIL NIL)) 其中 n 是数组的维度。 [11]> #2a((1 2 3) (4 4 4)) #2A((1 2 3) (4 4 4)) 可以使用:initial-element 参数初始化数组元素的值。 [12]> (make-array '(2 3) :initial-element 2) #2A((2 2 2) (2 2 2)) 取出数组内的元素我们调用 aref,要替换数组的某个元素,我们使用 setfaref。 > (setf arr (make-array '(2 3))) #2A((NIL NIL NIL) (NIL NIL NIL)) > (aref arr 0 1) NIL > (setf (aref arr 0 1) 'b) B > (aref arr 0 1) B > arr #2A((NIL B NIL) (NIL NIL NIL)) 2.字符串 一个字符 c#\c 表示 字符比较函数 char< (小于), char<= (小于等于), char= (等于), char>= (大于等于) , char> (大于),以及 char/= (不同) aref 来取出元素,但对一个字串,你可以使用更快的 char 函数。 [30]> (aref "abc" 1) #\b [31]> (char "abc" 1) #\b 比较两个字串,你可以使用通用的 equal 函数,但还有一个忽略大小写的比较函数 string-equal。 连接字符串 [7]> (concatenate 'string "not " "to worry") "not to worry" 3.结构 定义结构使用 defstruct, [8]> (defstruct point x y) POINT 定义了一个 point 具有两个字段 xy,操作方法: [9]> (setf p (make-point :x 0 :y 0)) #S(POINT :X 0 :Y 0) [10]> (point-x p) 0 [11]> (point-y p) 0 [12]> (setf (point-y p) 2) 2 [13]> p #S(POINT :X 0 :Y 2) 测试是否是一个point: [14]> (point-p p) T make-point , point-p , copy-point , point-xpoint-y 函数都是在定义结构时隐式定义了。 4.哈希表 (Hash Table) 当列表的长度大幅上升时(或是 10 个元素),使用哈希表会来得比较快。 [1]> (setf ht (make-hash-table)) #S(HASH-TABLE :TEST FASTHASH-EQL) [2]> (gethash 'color ht) NIL ; NIL [3]> (setf (gethash 'color ht) 'red) RED [4]> (gethash 'color ht) RED ; T [5]> ht #S(HASH-TABLE :TEST FASTHASH-EQL (COLOR . RED)) [6]> (setf (gethash 'size ht) '10) 10 [7]> ht #S(HASH-TABLE :TEST FASTHASH-EQL (SIZE . 10) (COLOR . RED)) [12]> (remhash 'size ht) NIL [13]> ht #S(HASH-TABLE :TEST FASTHASH-EQL (COLOR . RED)) make-hash-table构造一个哈希表,gethash第一个参数是键值,第二个是哈希表。返回的第一个参数是键值对应的值,不存在返回nil。第二个参数表示是否存在对应的值,不存在为nil,应该主要为了区别方便判断,比如nil可能为值。remhash是删除一个记录。 [14]> (setf ht2 (make-hash-table :size 5)) #S(HASH-TABLE :TEST FASTHASH-EQL) [15]> (setf ht3 (make-hash-table :test #'equal)) #S(HASH-TABLE :TEST FASTHASH-EQUAL) 参数:size指定哈希表的大小,:test指定查询时候比较时用的函数,从构造完返回的值有显示:test的不同。 common lisp函数还真不是一般的多,从第一次看就感觉有很多函数没必要有,现在的感觉是无论用其他的能不能实现,只要你想到的就必须用一个函数可以直接实现。感觉好怪

上一篇:
下一篇:

相关文章:

Categories: 博客记录

0 Responses so far.

Leave a Reply