乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: johnengineer

[编程交流] 平均值、最小值、最大值

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:34:25 | 显示全部楼层
 
谢谢
 
很乐意帮忙。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 16:38:21 | 显示全部楼层
  1. (defun c:textvals (/ ss i tv vl)
  2.   (while (not ss)
  3.          (princ "\nSelect Text To Calulate...")
  4.          (setq ss (ssget '((0 . "TEXT")))))
  5.   (setq i (sslength ss))
  6.   (while (not (minusp (setq i (1- i))))
  7.          (setq tv (cdr (assoc 1 (entget (ssname ss i)))))
  8.          (setq vl (cons (atof tv) vl)))
  9.   (setq min_val (apply 'min vl)
  10.         max_val (apply 'max vl)
  11.         avg_val (/ (apply '+ vl) (length vl)))
  12.   (prin1))

 
这里有一些问题:
 
您需要测试多行文字实体吗?
 
您需要测试文本中的0-9个字符和小数点。
允许昏迷吗?
一个(wcmatch)可以做到这一点,但它有点笨重。
 
您可能需要过滤出纸面空间/模型数据库实体
 
可能还有更多的方法可以帮助你-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:38:36 | 显示全部楼层
大卫,你让我羞愧
 
就在我认为我已经理解了LISP的时候,我惊讶地发现还有更多的东西需要学习
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:42:43 | 显示全部楼层
我对你的代码David印象深刻,希望能从中学到很多。我理解大部分代码,除了这一行:
 
 
我知道您正在创建选择集中所有数字的列表,但它如何处理“vl”的初始值?
 
i、 e.如果文本包含以下内容,您是否会留下:
 
1,2,3,4,5:
 
  1. (1 2 3 4 5 [b]nil[/b])
或类似的东西,如vl的初始值(nil)在那里?
 
提前感谢您的帮助
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 16:47:00 | 显示全部楼层
李,
 
nil的值是一个空列表()。
  1. Command: (null nil)
  2. T
  3. Command: (listp nil)
  4. T

 
这就是为什么在处理列表时将变量声明为局部变量非常重要的原因之一。否则,由于变量已绑定到列表,因此会得到错误的结果。
 
大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:49:03 | 显示全部楼层
不错。谢谢,我现在明白多了。
 
当我创建LISP时,限制我的是如何将选择集转换为列表我真的很想在LISP中使用内置的“min”和“max”函数,但因为我不知道如何将选择集转换为列表,所以我不得不即兴创作并用自己的方式找到最大值。
 
我还喜欢LISP只要求一个选择集并从那里处理事情的方式,这使事情变得更简单。
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 16:52:19 | 显示全部楼层
下面是使用选择集的另一个示例。
  1. (defun c:test (/ ss lst numlst txt2num)
  2. (defun txt2num (txt / num)
  3.    (or (setq num (distof txt 5))
  4.        (setq num (distof txt 2))
  5.        (setq num (distof txt 1))
  6.        (setq num (distof txt 4))
  7.        (setq num (distof txt 3))
  8.    )
  9.    num
  10. )
  11. (prompt "\nSelect text to analize numbers.")
  12. (if (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  13.    (progn
  14.      (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  15.      (mapcar '(lambda (x) (setq numlst (cons (txt2num (cdr (assoc 1 (entget x)))) numlst)))
  16.              lst
  17.      )
  18.      (if (setq numlst (vl-remove-if 'listp numlst))
  19.        (progn
  20.          (print "Min number ")
  21.          (princ (apply 'min numlst))
  22.          (print "Max number ")
  23.          (princ (apply 'max numlst))
  24.          (print "Average of numbers ")
  25.          (princ (/ (apply '+ numlst) (length numlst)))
  26.        )
  27.        (prompt "\nNo numberf found.")
  28.      )
  29.    )
  30. )
  31. (princ)
  32. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:54:34 | 显示全部楼层
你的代码给我留下了深刻的印象,但在我想问的许多问题中,有一个问题:
 
distof和atof之间有什么区别?
 
谢谢
 
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 16:57:25 | 显示全部楼层
谢谢李,
 
对于字符串的格式,distof更宽容。
出于这个原因,我几乎总是使用getdist。
另请参阅附件中更详细的例程。
 
下面是另一个示例:
  1. 7

Text2Num驾驶室2-1。LSP
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:01:51 | 显示全部楼层
啊,我现在更明白了。谢谢
 
我必须说,你附加的Lisp程序绝对是惊人的写得这么好(不是说我大部分都懂)。。。但还是很精彩
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 20:18 , Processed in 0.367425 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表