zoukankan      html  css  js  c++  java
  • 【Visual Lisp】表处理专题

    表处理大全
    ;;★★★01.创建表★★★
    (setq lst '());;创建一个空表
    (list 1 2 3 4) '(1 2 3 4) ;;构造表的两种形式
    (vl-list* 1 "TT" 2);;构造表,如果最后一个参数是原子则返回点对(1 "TT" . 2),如果只有单一原子则返回原子,如果最后一个参数是表则返回表

    ;;★★★02.表元素获取和表修改更新★★★
    (car '(1 2 3 4));;获取表的第一个元素1
    (cdr '(1 2 3 4));;获取去掉第一个元素1后的表'(2 3 4)
    (caddr '(1 2 3 4));;a和d的组合获取第三个元素,从右到外左d再d再a,也就是先去掉第一个元素后的表,再去掉第一个元素后的表,再取第一个元素。
    (last '(1 2 3 4));;获取表最后一个元素4
    (nth 2 '(1 2 3 4));;获取表中第三个元素3,nth的第一个参数是表中序号,从0开始
    (append '(1 2 3 4) (list 5));;多个表的元素组成一个表'(1 2 3 4 5)
    (cons 0 '(1 2 3 4 5));;将元素0插入表头'(0 1 2 3 4 5);如果第二个参数不是表则构成点对,比如(cons '(1 2) 3) 返回((1 2) . 3)
    (reverse '(0 1 2 3 4 5));;反转表中元素'(5 4 3 2 1 0)
    (assoc 10 entlst);;根据表内第一层子表的第一个元素搜索并返回这个子表
    (subst '(1 123) '(1 234) lst);;用'(1 123)替换表lst中的'(1 234)

    ;;★★★03.表元素处理★★★
    (length '(1 2 3 4));;表元素的个数4,如果是点对表则返回错误
    (vl-list-length '(1 2 3 4));;返回表的元素个数,如果是点对表则返回nil
    (vl-position 3 '(1 2 3 4));;返回元素在表中的索引位置,从0开始。如果不在表中,返回nil
    (listp '(1 2 3));;判断是否是表,是表返回T,否则返回nil
    (vl-consp '(1 2 3));;判断表是否有元素,有则返回T,无则返回nil
    (member 2 '(1 2 3 4));;返回第一个参数表达式在第二个参数表中开始出现后的表(2 3 4)
    (vl-member-if '(lambda (x) (= (cdr x) "CIRCLE")) lst2);;将表中每一个元素传如表达式,如果不是nil则返回从这个元素开始的表。如果lst2是圆的组码表,则返回(0 . "CIRCLE")和后面子表的表((0 . "CIRCLE") (330 . <图元名: 7ef93fa8>) (5 . "7F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10 126.404 159.429 0.0) (40 . 42.1645) (210 0.0 0.0 1.0))
    (vl-member-if-not 测试表达式 表);;此函数是要返回nil,而vl-member-if是要非nil
    (vl-some '(lambda (x) (if (>= x 4) x)) '(1 2 3 4 5));;将表的每个元素传给测试表达式,如果返回值非nil则返回这个元素经过测试表达式的结果(停止后面元素的传递执行)。如果都是nil,则返回nil
    (vl-remove-if '(lambda (x) (<= x 2)) '(1 2 3 4 5));;将每个元素传给测试表达式,如果非nil,则保留这些元素(3 4 5)
    (vl-remove-if-not 测试表达式 表);;与vl-remove-if相反
    (vl-remove 2 '(1 2 3 4));;移除表中某元素(1 3 4)

    ;;★★★04.处理表内所有元素★★★
    (foreach tempt lst [(表达式)]...);;遍历表内元素
    (mapcar '(lambda (x) (+ x 1)) '(1 2 3));;表内每一个元素单独执行lambda表达式后再返回为表(2 3 4)
    (apply '+ '(1 2 3));;将表中所有元素同时传入表达式,返回表达式执行后的结果6
    (vl-every '(lambda (x) (> x 0)) '(1 2 3));;将表中每个元素传入表达式,每个元素传入表达式执行后值均为非nil时才返回T
    (vl-string->list "你好啊1");;将字符串转换为对应ascii码表(196 227 186 195 176 161 49),汉字用两个数表示,196 227 表示"你"
    (vl-list->string '(196 227 49));;将表示字符串的ascii码数值表转换为对应字符串"你1"
    (vl-sort '(1 3 2 1) '<);;表内元素排序,注意如果出现两个元素则排序后只有一个(1 2 3)
    (vl-sort-i '(1 3 2 1) '<);;根据排列方法(从大到小或者从小到大)排序,列出元素索引表(从0开始)(3 0 2 1)

     

     

     

     

  • 相关阅读:
    项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】
    项目管理实践教程二、源代码控制【Source Control Using VisualSVN Server and TortoiseSVN】
    javascript 容易忽略或者误用的七个基础知识点
    未来的路还很长
    Nodejs
    CSS浏览器兼容性相关
    HTML5
    一些正则
    Sublime 使用
    Array.prototype.slice.call(arguments,1)
  • 原文地址:https://www.cnblogs.com/Helchan/p/4290845.html
Copyright © 2011-2022 走看看