list处理
炼气散人
等儿子高考后,或许会回来
展开
-
创建list方法总结
构建一个list注意要标记不要求值,比如用‘ 或者list> (list "a" "b" "c")("a" "b" "c")或者> '("a" "b" "c")("a" "b" "c")查找在一个全是string的list中用正则表达式查找查找第一个匹配到的元素:> (set 'l '("WARNING: org.apache.hadoop.metrics.jvm.EventCounter原创 2014-06-06 14:03:19 · 4748 阅读 · 0 评论 -
修改list中的元素
主要通过setf参考 setq & setf的setf章节原创 2016-07-26 08:59:48 · 4483 阅读 · 2 评论 -
newlisp quick sort增强
增加一个函数extract作为参数,可以通过extract提取list某个元素的某个属性然后进行比较,而不是假定list中的每个元素都是简单的symbol,并且可以比较。这样就可以允许用在实际工作中。;; @arg extract is a function to extract value from object to compare with key(define (quick-sort-e原创 2016-06-30 14:08:57 · 2357 阅读 · 0 评论 -
newlisp实现quick sort
实现的时候要注意,如果将一个list传给函数,在函数内部修改后,不会改变函数外的list。因此采用了变通的方法,将list作为全局变量,函数递归时不传递list为参数。实现代码如下:sort.lsp文件(setq values '())(define (quick-sort start end) (if (>= start end) (begin;; (println "re原创 2016-06-29 22:06:12 · 2523 阅读 · 0 评论 -
list里字符串元素的拼接操作
自己写,就是遍历list,取出每一个string,然后拼接在一起,并且可能还需要加上,号这样的分隔符号。重复写多麻烦,用join函数吧。> (setf l '("a" "b" "c"))("a" "b" "c")> (join l ",")"a,b,c"> (join l "," true)"a,b,c,"最后一个参数true表示分隔符号,要加到最后面。原创 2016-05-25 21:11:47 · 25104 阅读 · 0 评论 -
list作为map使用
用lookup查找key> (set 'l '(("a" "b") ("c" "d")))(("a" "b") ("c" "d"))> (lookup "a" l)删除key/value用pop-assoc> (pop-assoc "a" l)("a" "b")> l(("c" "d"))原创 2015-02-11 18:28:51 · 1993 阅读 · 0 评论 -
用match从两个list中挑出匹配部分
match函数很特别, 就是用两个list比较的时候,后一个list中如果有符合前一个list的通配符的描述,则挑出来,作为独立的list返回。简单的例子如下:> (match '(a ? c) '(a b c))(b)注意通配符只有三种: * ? 和 +* 表示任何多个元素? 表示可以有元素,也可以没有+ 表示至少有一个元素(match '(a ? c) '(a (x y z) c)) →原创 2014-09-08 16:09:55 · 6060 阅读 · 0 评论 -
append构建动态函数
append我常用于连接两个string或者list,其实还可以这样用,将两个list连接成一个lambda表达式:> (append (lambda (x)) '((add x 1)))(lambda (x) (add x 1))append的第一个参数是(lambda (x)) 一个List,有两个元素,第二个参数也是一个list,子元素也是一个list拼接后就是变成了一个完整的lambda原创 2014-12-10 23:57:21 · 3178 阅读 · 0 评论 -
用find/find-all match方式查找list元素
查找list中的一个子list假定数据库里面有若干行记录,newlisp mysql模块返回结果是用一个list表示这个若干行记录,然后每个元素都是一个list,里面包含一行记录,每行记录list里面有包含了若干list,每个list都有两个元素:字段名和字段值。现在我们可以用find方式来进行模式查找> (find (list (list "issue_id" 1773) '*) '((("is原创 2014-12-17 00:29:36 · 4165 阅读 · 0 评论 -
从list中查找子list
member函数用法很奇怪,用一个元素到list中查找,如果找到,则将找到的元素和之后所有元素变成一个新的list返回,如果找不到则返回nil.(set 'aList '(a b c d e f g h)) → (a b c d e f g h)(member 'd aList) → (d e f g h)(member 55 aList)原创 2014-09-07 22:35:12 · 2946 阅读 · 1 评论 -
list删除和挑选
clean函数用于删除符合条件的list元素,filter函数用于挑选符合条件的list元素(clean symbol? '(1 2 d 4 f g 5 h)) → (1 2 4 5)(filter symbol? '(1 2 d 4 f g 5 h)) → (d f g h)(define (big? x) (> x 5)) → (lambda (x) (> x 5)原创 2014-09-07 23:23:52 · 2904 阅读 · 0 评论 -
处理string list
处理string list在一个string list中用正则表达式查找查找第一个匹配到的元素:> (set 'l '("WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the \log4j原创 2014-09-07 22:28:41 · 2618 阅读 · 0 评论 -
用map对一个或者多个list元素操作
map是一个非常好用的功能,先举个简单的例子两个list元素的操作(map + '(1 2 3) '(50 60 70)) → (51 62 73)两个list元素的if操作(map if '(true nil true nil true) '(1 2 3 4 5) '(6 7 8 9 10))→ '(1 7 3 9 5)这个有点意思,相当与用一堆bool值来确定是从第一个list中挑选元素,原创 2014-12-10 22:16:55 · 4632 阅读 · 0 评论