表内汉语根据声母首字母排序
- ;[llsheng_73]■■■(275988734) 2022/9/19 17:52:06
- (defun sortn(l keys funs fuzz / n mposition);;;keys关键字列号要么为nil要么为表,funs各个关键字的排序方式,通常为<或>,也可以为自定义序列,比如'("张三""李四")
- (defun mposition(e l / i)(if(setq i(vl-position e l))i(length l)))
- (or(listp(car l))(setq l(mapcar'list l)))
- (or(listp funs)(setq funs(list funs)))
- (if(zerop(setq n(length keys)))(setq n(length(car l))))
- (while(<(length funs)n)(setq funs(cons(car funs)funs)))
- (mapcar(function(lambda(x)(nth x l)))
- (vl-sort-i(if keys(mapcar(function(lambda(x)(mapcar'(lambda(y)(nth y x))keys)))l)l)
- (function(lambda(x y / n )(setq n 0)
- (while(and(equal(car x)(car y)fuzz)(cdr x)(cdr y))(setq x(cdr x)y(cdr y)n(1+ n)))
- (if(listp(setq n(nth n funs)))
- (<(mposition(car x)n)(mposition(car y)n))
- (n(car x)(car y))))))))
- ;[llsheng_73]■■■(275988734) 2022/9/19 17:52:18
- ;_$ (SORTN'(("上海""崇明区")("北京""朝阳区")("上海""静安区")("北京""房山区")("重庆""酉阳")("四川""成都"))'(0 1)'(("北京""上海")("静安区""朝阳区""房山区""崇明区""成都""酉阳"))0)
- (("北京" "朝阳区") ("北京" "房山区") ("上海" "静安区") ("上海" "崇明区") ("四川" "成都") ("重庆" "酉阳"))
|