明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: matichen

请教一下关于lisp表排序的问题。[求助]

  [复制链接]
发表于 2002-9-16 23:47:00 | 显示全部楼层

acad_strsort or vl-sort

(acad _strlsort  list)

参数

list

要排序的字符串表

返回值

排序后的相同字符串表。如果 list 参数是一个无效表或者没有足够的内存来进行排序,acad_strlsort
函数返回 nil。

样例

下列代码将一年中十二个月的月名的缩写字符串表按字母顺序进行排序:

命令:(setq mos '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug"
         "Sep" "Oct" "Nov" "Dec"))

("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec")

命令:(acad_strlsort mos)

("Apr" "Aug" "Dec" "Feb" "Jan" "Jul" "Jun" "Mar" "May" "Nov" "Oct" "Sep")


(vl-sort  list comparison-function)

参数

list

任意表。

comparison-function

比较函数。它可以是任何一个这样的函数:接受如下两个参数,如果第一个参数按排序顺序在第二个元素之前,则返回 T 或非 nil 值。comparison-function 的值可以采用如下格式:

符号 (函数名)
        '(LAMBDA (A1 A2) ...)
        (FUNCTION (LAMBDA (A1 A2) ...))

返回值

表,其中包含 list 中的元素,这些元素按照 comparison-function 中指定的顺序排列。表中可能删除了重复的元素。

样例

对数值表排序:

_$ (vl-sort '(3 2 1 3) '<)

(1 2 3)     ;  

请注意结果表中仅包含一个 3。
按 Y 坐标对二维点表排序:

_$ (vl-sort '((1 3) (2 2) (3 1))
             (function (lambda (e1 e2)
                         (< (cadr e1) (cadr e2)) ) ) )

((3 1) (2 2) (1 3))

对符号表排序:

_$ (vl-sort  
   '(a d c b a)
   '(lambda (s1 s2)
     (< (vl-symbol-name s1) (vl-symbol-name s2)) ) )

(A B C D)       ;  请注意在结果表中仅有一个 A
发表于 2002-9-23 10:25:00 | 显示全部楼层

(SETQ DATA (APPEND DATA (LIST TIANJIA)))

发表于 2009-9-7 22:12:00 | 显示全部楼层
有表((-1 3) (-2 4)......)
请问怎么把里面大于零的x值和小于零的分别排序,并输出
发表于 2012-2-21 21:13:54 | 显示全部楼层
学习了 非常感谢
发表于 2012-9-19 11:04:04 | 显示全部楼层
完全看不懂,,,,
发表于 2012-9-23 14:45:14 | 显示全部楼层
tdtdwe 发表于 2009-9-7 22:12
有表((-1 3) (-2 4)......)
请问怎么把里面大于零的x值和小于零的分别排序,并输出

逐个分析,遍历一下即可。

示例代码:
  1. ;|
  2. ((-1 3) (-2 4)......)
  3. 请问怎么把里面大于零的x值和小于零的分别排序,并输出
  4. |;

  5. (defun c:tt ()
  6.   (setq lst '((-1 5) (2 3) (4 6) (-2 -7) (8 -9)))
  7.   ;;判别
  8.   (setq        lst1 '()
  9.         lst2 '()
  10.   )
  11.   (foreach n lst
  12.     (if        (< (car n) 0)
  13.       (setq lst1 (cons n lst1))
  14.       (setq lst2 (cons n lst2))
  15.     )
  16.   )
  17.   ;;显示
  18.   (print "\n小于0的表: ")
  19.   (princ lst1)
  20.   (print "\n大于0的表: ")
  21.   (princ lst2)
  22.   (princ)
  23. )
发表于 2012-9-23 21:44:15 来自手机 | 显示全部楼层
太牛了,就是看不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-7 21:20 , Processed in 0.157877 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表