| 表 | |
函数名称 | 函数意义 | 例子 |
判别类 | | |
(consp x) | 是否空表 | |
(std-dotted-pair-p x) | 是否点对 | |
(std-not-proper-list-p
x) | 判别最后一个元素是否点对 | |
(std-string-list-p x) | 是否字符串表 | |
(std-number-list-p x) | 是否数值表 | |
附件搜索类 | | |
(first
lst) | cadr 表的第一个元素,如同cadr | |
(second lst) | 表的第二个元素,如同 caddr | |
(third lst) | 表的第三个元素,如同 cadddr | |
(fourth lst) | 表的第四个元素,如同 (car (cddddr)) | |
(fifth lst) | 表的第五个元素,如同 (cadr (cddddr)) | |
(sixth lst) | 表的第六个元素,如同 (caddr (cddddr)) | |
(seventh lst) | 表的第七个元素,如同 (cadddr (cddddr)) | |
(eighth lst) | 表的第八个元素,如同 (car (cddddr (cddddr))) | |
(ninth lst) | 表的第九个元素 | |
(tenth lst) | 表的第十个元素 | |
(rest lst) | 表中除第一个外的其他元素,如同 cdr | |
(std-list-length lst) | 表中元素长度,接受点对元素accepting dotted pairs | |
(std-elt lst i) | 表中第i个元素的值 | |
(std-position x lst) | 元素x在表中的位置 | |
(std-position-if pred lst) | 返回第一个满足pred(预定的类型,如字符串,数字,或者是由lambda函数定义的)表达的元素位置,以下称pred为约束条件 | (std-position-if
'numberp '(0 1 2 3)) =>
0 (std-position-if 'stringp '(0 "1" 2 "3"))
=> 1 |
(std-position-if-not
pred lst) | 返回第一个不满足由pred表达的元素位置 | |
(std-rposition x lst) | 返回x在表中最后一次出现的位置 | |
(std-r assoc x alst) | 与assoc对应的函数,返回某个指定点对名称所对应的点对 | (std-rassoc "line" '((0 . "line")(8
. "0")(10 0.0 0.0 0.0))=> (0 . "line") |
(std-member-if pred lst) | 查找表中满足约束条件的第一个元素,并与后面的元素组成一个表,如同visual lisp中的vl-member-if-not | (std-member-if 'numberp '(0 1 2 3))
=> (0 1 2 3) (std-member-if 'stringp '(0
"1" 2 "3")) => ("1"
2 "3") |
(std-member-if-not pred
lst) | 查找表中不满足约束条件的第一个元素,并与后面的元素组成一个表 | (std-member-if-not 'numberp '(0 1 2 3))
=> nil (std-member-if-not 'stringp '("0" "1"
2 "3")) => (2 "3") |
(std-count
x lst) | 返回元素x在表lst中的个数 | |
(std-count-if pred lst) | 返回表中满足约束条件pred的元素个数 |
ALIGN="LEFT">(std-count-if 'stringp '(0 "1" 2 "3"))
=> 2 |
(std-count-if-not pred
lst) | 与上一个函数相反 | |
子表 | | |
(std-firstn n lst) ; | 返回表中前n个元素组成的子表,对(std-nthcdr n lst)的补充 | |
(std-nthcdr
n lst) ; | 返回表中第n个元素之后所有元素组成的子表 | (std-firstn 2 '(0 1 2 3)) =>
(0 1) (std-nthcdr 2 '(0 1 2 3)) => (2 3) |
(std-subseq
lst start end) | 返回表中从start到end-1的一个表 | (std-subseq '(0 1 2 3) 1 3) =>
(1 2) (std-subseq '(0 1 2 3) 0 3) =>
(0 1 2) (std-subseq '(0 1 2 3) 0 0) =>
nil (std-subseq '(0 1 2 3) 0 -1) => error
(std-subseq '(0 1 2 3) 3 4) => (3) |
(std-butlast
lst) | 返回除了表中最后一个元素的一个表 | |
(std-select <lst>
<i>|<list-of-i>) | 根据i选出表中第i个元素,或者根据几个i组成的<list-of-i>找出表中的几个元素组成的表。 | (std-select '(a b c d) 0)
=> a (std-select '(a b c d) '(1 0) =>
(b a) (std-select '(a b c d) '(1 0 4) =>
error |
修改 | | |
(std-adjoin x lst) | 把一些x假如到list中,假如是重复元素,则不加入,用于构建没有重复元素的表 | |
X:STR="(std-adjoin 0 '(1 2))=> (0 1 2) (std-adjoin 1 '(1 2)) => (1 2) (std-adjoin 1 nil) => (1) (std-adjoin nil nil) => (nil) ">(std-adjoin
0 '(1 2))=> (0 1 2) (std-adjoin 1 '(1 2))
=> (1 2) (std-adjoin 1 nil)
=> (1)
(std-adjoin nil nil) =>
(nil)
非破坏性的操作 | | |
(std-setnth
new i lst) | 用于修改第i个元素为新值new | (std-setnth 'new 2 '(0 1 2)) =>
(0 1 new) |
(std-delpos i lst) | 删除表中第i个元素,返回精简的表 | (std-delpos 1 '(1 2)) =>
(1) |
(std-remove
x lst) | 删除表中元素值为x的所有元素,返回精简的表 | (std-remove 0 '(0 1 2))=>
(1 2) (std-remove -1 '(0 1 2)) => (0 1 2) (std-remove
0 '(0 1 0 2))=> (1 2) |
(std-remove-if pred lst) | 除表中满足某种约束条件pred的元素,返回表 | (std-remove-if 'numberp '(0 1 2))
=> nil |
(std-remove-if-not
pred lst) | 与上一个函数相反,保留 | |
(std-remove-duplicateslst) | 删除重复元素,排序不破坏。 | |
(std-split-list
n lst) | 按照个数n将表分成许多子表 | (std-split-list 3 '(0 1 2 3 4 5 6 8 9)) =>
((0 1 2)(3 4 5)(6 7 8)(9)) |
(std-flatten
lst) | tree =>将表变为一维表,没有子表形式 | (std-flatten '((0 1 2)(3 4 (5))(6 7 8)(9))
=> (0 1 2 3 4 5 6 8 9) |
(std-rotate-left
lst) | 把表的第一个元素移到最后一个 | (std-rotate-left '(0 1 2 3 4)) =>
(1 2 3 4 0) |
(std-rotate-right
lst) | 把表的最后一个元素移到第一个 | |
破坏性的建表形式,push(推)或者pop(取) | | |
(std-push x 'lst) | 将一个元素推到表(堆栈)中,有破坏性 | (std-push 0 '(1 2 3)) =>
(0 1 2 3) (setq stack '(1 2 3)) (std-push 0 'stack)
=> (0 1 2 3) !stack
=> (0 1 2 3) |
(std-pop
'lst) | 将一个元素从表(堆栈)中取出,有破坏性 | (std-pop '(1 2 3))
=> 1 (setq stack '(1 2 3)) (std-pop 'stack)
=> 1 !stack
=> (2 3) |
(std-pushnew x 'lst) | 将新值推到表(堆栈)中,有点类似std-adjoin,有破坏性 | (std-pushnew 0 '(0 1 2 3)) =>
(0 1 2 3) (setq stack '(1 2 3)) (std-push 0 'stack)
=> (0 1 2 3) !stack
=> (0 1 2 3) |
(std-pushmax
x 'lst nmax) | 将新值推到表(堆栈)中,但保持表的最大长度为nmax,有破坏性 | (std-pushmax 0 '(1 2 3 4) 4) =>
(0 1 2 3) (setq stack '(1 2 3)) (std-push 0 'stack 4)
=> (0 1 2 3) !stack
=> (0 1 2 3) (std-push 1 'stack 4)
=> (1 0 1 2) |
mapping,
iteration 映射,反复 | | |
(std-mapatom
func tree) | 将表中所有的元素按照func定义的函数进行变化,表中所有元素的树状结构不会改变 | (std-mapatom '1+ '(0 1 (2 (3))))=>
(1 2 (3 (4))) (std-mapatom (function (lambda (x) (cons 0 x)))
'(0 1 (2 (3))))=> ((0 . 0)(0 . 1) ((0 . 2) ((0 . 3)))) |
(std-every
pred lst) | 对表中元素进行约束条件(pred)的测试,都对了返回t,否则nil | (std-every 'std-pointp points) |
(std-every-n
pred lists) | 相比every-n,有更多参量 | (std-every-n
'and (list (mapcar 'x-of points) (mapcar 'y-of points))) |
(std-some
pred lst) | 对表中某些元素进行约束条件(pred)的测试,只要有对了就返回t,否则nil | |
(std-some-n
pred lists) | (std-some pred lst) 的多参量判别 | |
集合操作(无序的多集合) | | |
(std-union
set1 set2) | 集合的并操作,合并两个集合,把第二个集合中的元素加到第一个,不是很稳定的函数,比(std-ordered-union
set1 set2)稍快 | |
(std-ordered-union
set1 set2) | 比较稳定的版本,集合并操作,保持第一个集合的顺序,第二个集合中的不同元素加入到集合一的最后 | (std-ordered-union '(1 5 3 4) '(1 2 3 3))=>
(1 5 3 4 2) |
(std-intersection
set1 set2) | 集合的交操作 | (std-intersection '(2 1 5 3 3 4 2) '(2
1 2 3 3))=>(2
1 3 3 2) |
(std-set-difference
set subset) | 集合1中不在集合2中的元素 | (std-set-difference '(0 1 2 3 4 5) '(2 0 6 7))
=> (1 3 4 5) |
(std-set-exclusive-or
set1 set2) | 集合的余操作,不同时属于集合1或集合2的元素 | (std-set-exclusive-or '(0 1 2) '(2 3 4))
=> (0 1 3 4) |
(std-subsetp
subset set) | 集合1是否集合2的子集 | (std-subsetp '(1 2) '(0 2 1 2)) =>
t; (std-subsetp '(3 1 2) '(0 2 1 2)) =>
nil |
(std-set-equal-p
lst1 lst2) | 集合1、2是否完全相等 | (std-set-equal-p '(0 1 2) '(1 2 0)) =>
t (std-set-equal-p '(0 1 2) '(1 1 2 0))=>
nil |
表的创建 | | |
(std-make-listn def) | =>建立一个包含n个def的表 | (std-make-list 3 nil)=>
(nil nil nil); (std-make-list 3 0.0)=>
(0.0 0.0 0.0) |
(std-int-list
n) | => 创建一个从0~n-1整数序列的表 | (std-int-list 3)=> (0
1 2) |
(std-iseq
start end) | 创建一个从start到end的整数表 | (std-iseq 1 5)=>
(1 2 3 4 5); (std-iseq 5 5)=> (5) |
(std-rseq
start end n) | real sequence of n nums | |
(std-nxtcyc i n incr-func) | 找出第i个元素在整数n循环(就是0,1,2,3n-1)中,下一个应该出现的数,一个比较奇怪的概念,据作者说用在多义线的子实体方面比较有用, | (std-nxtcyc 0 3 '1+)=>
1 (std-nxtcyc 1 3 '1+)=> 2
(std-nxtcyc 2 3 '1+)=> 0 (std-nxtcyc 3
3 '1+)=> 1 |
(std-copy-treelst) | =>把一个表拷贝到一个备份中,比较奇怪,作者说这个几乎在autolisp中不用,除了说想对表排序又不想破坏其结构。 | |
排序和整合 | | |
(std-sortlst
less-pred) | 排序函数 | (std-stable-sort '(2 0 1 2 3 4 0) '<)
=> (0 0 1 2 2 3 4) (std-fast-sort '("2" "1"
"3" "4" "0") '<) =>
("0" "1" "2" "3" "4")
(std-sort pointlist '(lambda (x y) (< (car x) (car y)))) |
(std-stable-sortlst
less-pred) | 类似,不删除多余元素,保留次序 | |
(std-fast-sortlst
less-pred) | 删除多余元素 | |
(std-mergelst1
lst2 less-pred) | 对两个表按某种排序法进行合并 | (std-merge '(0 2 3) '(1 4 5) '<)=>
(0 1 2 3 4 5) |
随机数 | | |
(std-randomize
lst) | 对原表进行随机打乱 | (std-randomize
'(0 1 2 3 4)) |
(std-random-elt
lst) | 随机取出表中的某个元素 | |