明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3680|回复: 21

求数据排序程序,数学上的排序

  [复制链接]
发表于 2012-4-24 18:04:59 | 显示全部楼层 |阅读模式
目的:1 2 3 4 5 6   要排序生成((1 2 3)(2 3 4)(3 4 5)(4 5 6)(5 6 1))
下面程序生成的是((((((1 2 3) (2 3 4)) (3 4 5)) (4 5 6)) (5 6 1)) (6 1 2))
求修改!谢谢!
(defun c:tst2()
  (setq i 0)
  (setq ptlist(list 1 2 3 4 5 6))
  (setq lst3p(list (nth i ptlist) (nth (+ i 1) ptlist) (nth (+ i 2) ptlist)))
  (setq i 1)
  (repeat (- (length ptlist) 3)
    (setq lst(list (nth i ptlist) (nth (+ i 1) ptlist) (nth (+ i 2) ptlist)))
    (setq lst3p(list lst3p lst))
    (setq i (1+ i))   
  )
  (setq lst3p-2(list (nth (- (length ptlist) 2) ptlist) (nth (- (length ptlist) 1) ptlist) (nth 0 ptlist)))
  (setq lst3p-1(list (nth (- (length ptlist) 1) ptlist) (nth 0 ptlist) (nth 1 ptlist)))
  (setq lst3p(list lst3p lst3p-2))
  (setq lst3p(list lst3p lst3p-1))
  (princ lst3p)
)
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2012-4-24 18:05:47 | 显示全部楼层
((1 2 3)(2 3 4)(3 4 5)(4 5 6)(5 6 1)(6 1 2 ))
刚才忘了6 1 2 了
发表于 2012-4-24 18:20:19 | 显示全部楼层
本帖最后由 Gu_xl 于 2012-4-24 18:41 编辑

  1. (defun tst (l n / k nn)
  2.   (setq k -1 nn (length l))
  3.   (mapcar
  4.     (function
  5.       (lambda (a / ll m)
  6.        (setq k (1+ k) m k)
  7.        (repeat n
  8.        (setq ll (append ll (list (nth m l))))
  9.        (setq m (rem (1+ m) nn))
  10.        ll
  11.        )
  12.        )
  13.       )
  14.     l
  15.     )
  16.   )
  17. ;;测试
  18. (tst '(1 2 3 4 5 6) 3)
  19. 返回: '((1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 1) (6 1 2))


评分

参与人数 1明经币 +1 收起 理由
yjr111 + 1 很给力!

查看全部评分

 楼主| 发表于 2012-4-24 18:45:32 | 显示全部楼层
版主就是强,此函数比我写的高级多了!
发表于 2012-4-24 18:48:40 | 显示全部楼层
本帖最后由 xshrimp 于 2012-4-24 18:50 编辑

  1. (defun tst(l / l2 l3)
  2.   (setq l2 (append(cdr l)(list(car l)))l3(append(cdr l2)(list(car l2))))
  3.   (mapcar '(lambda(x y z) (list x y z)) l l2 l3)
  4. )
命令: (tst (list 1 2 3 4 5 6))
((1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 1) (6 1 2))

点评

绝世高手  发表于 2012-4-24 19:42

评分

参与人数 3明经币 +3 收起 理由
cabinsummer + 1 赞一个!
wowan1314 + 1 赞一个!
yjr111 + 1 赞一个!

查看全部评分

 楼主| 发表于 2012-4-25 09:45:28 | 显示全部楼层
本帖最后由 革天明 于 2012-4-25 09:46 编辑
革天明 发表于 2012-4-24 18:45
版主就是强,此函数比我写的高级多了!


无法对坐标进行排序
((2098.7 647.367) (2098.7 1073.41) (1824.61 1073.41) (1676.14 807.132) (1558.12 647.367))
说是错误: 参数类型错误: listp

点评

不是程序的问题!是你的问题!错误提示说的明明白白!  发表于 2012-4-25 09:52
 楼主| 发表于 2012-4-25 10:01:53 | 显示全部楼层
xshrimp 发表于 2012-4-24 18:48
命令: (tst (list 1 2 3 4 5 6))
((1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 1) (6 1 2))

不能对坐标点进行排序,求修改
发表于 2012-4-25 12:21:09 | 显示全部楼层
提供数据样本啊.
 楼主| 发表于 2012-4-25 12:51:33 | 显示全部楼层
xshrimp 发表于 2012-4-25 12:21
提供数据样本啊.

((2098.7 647.367) (2098.7 1073.41) (1824.61 1073.41) (1676.14 807.132) (1558.12 647.367))

点评

表前少 '  发表于 2012-4-25 12:53
 楼主| 发表于 2012-4-25 12:55:13 | 显示全部楼层
革天明 发表于 2012-4-25 09:45
无法对坐标进行排序
((2098.7 647.367) (2098.7 1073.41) (1824.61 1073.41) (1676.14 807.132) (1558 ...

原理上是一样的啊,把每个点组成的表,传递给函数,函数照纯数字组成的排序
(setq ptlist(list pt1 pt2 pt3 pt4 pt5 pt6))
我想得到的就是((pt1 pt2 pt3) (pt2 pt3 pt4) (pt3 pt4 pt5) (pt4 pt5 pt6) (pt5 pt6 pt1)(pt6 pt1 pt2))

点评

不要再纠结函数!函数完全正确!检查自身的数据问题吧!  发表于 2012-4-25 13:14
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 08:44 , Processed in 0.212578 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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