找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 652|回复: 3

[求助] [求助]:怎样获取一个列表内符合条件的元素?

[复制链接]
发表于 2006-4-13 18:40:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
有一个已知实数的列表和用户输入的实数,要求从此列表提取出差值在1以内且最接近用户输入的数值。比如列表为(1 10 5.1 8.2 36.5 5.3 16 5.8 79.8 180),用户如果输入的实数为5.6,返回值则为5.8,用户如果输入的实数为12,返回值则为nil。实在想不出用什么函数,请高手指点一二为盼。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-4-13 19:13:56 | 显示全部楼层
  1. [FONT=courier new]
  2. (load "xyp_lib.vlx")  ;版本 V.20060413
  3. ;|下载和加载通用函数(可在签名栏直接下载后放到搜索路径下)
  4. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  5. ★1·在acad.lsp中增加(load"xyp_lib.vlx")
  6. ■2·在每个程序内增加(load"xyp_lib.vlx")
  7. ■3·在command下,输入(load"xyp_lib.vlx")
  8. ■4·在菜单.mnl中增加(load"xyp_lib.vlx")
  9. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  10. [COLOR=red] ★通用函数下载地址:[/COLOR]
  11. [url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  12. |;

  13. (defun c:test ()
  14.   (CMDLA0)
  15.   (if (null no1)
  16.     (setq no1 1)
  17.   )
  18.   (setq        lst  '(1 10 5.1 8.2 36.5 5.3 16 5.8 79.8 180)
  19.         no1  (UREAL 1 "" "\n比较基数" no1)
  20.         lst1 '()
  21.         b    1
  22.         c    nil
  23.   )
  24.   (foreach n lst
  25.     (setq a (abs (- n no1)))
  26.     (if        (and (< a 1)
  27.              (< a b)
  28.         )
  29.       (setq b a
  30.             c n
  31.       )
  32.     )
  33.   )
  34.   (princ "\n符合条件的元素为: ")
  35.   (princ c)
  36.   (CMDLA1)
  37. )
  38. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-13 19:27:21 | 显示全部楼层
;仅供参考
(defun c:test (/ A NEWLIST NUM NUMLIST)
  (setq a (getreal "输入实数:"))
  (setq numlist '(1 10 5.1 1.5 8.2 36.5 5.3 16 5.8 79.8 180))
  (setq newlist nil)
  (foreach n numlist
    (if        (<= (abs (- n a)) 1.0)
      (setq newlist (cons (list (abs (- n a)) n) newlist))
    )
  )
  (setq newlist
         (vl-sort newlist
                  (function (lambda (e1 e2)
                         (< (car e1) (car e2))))))
  (setq num (cadr (car newlist)))
  num
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-15 12:51:56 | 显示全部楼层
经测试,两位高人的程序都很成功,不胜感谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-29 09:28 , Processed in 0.189142 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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