明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 766|回复: 3

[已解答] 程序局部变量问题

[复制链接]
发表于 2015-11-5 10:18 | 显示全部楼层 |阅读模式
本帖最后由 菜卷鱼 于 2015-11-5 14:24 编辑

像(rtos number [mode [precision]]) , mode 跟 precision 这两个变量爱填不填,函数都能使用,这种效果怎么弄出来的?

根据两位大神的回答,那我只能把程序这样弄了

用来测试的程序是用来排序的,论坛里有很多这种功能的,不过我这个跟他们的有点不一样
;(vla-sort 选择集 属性名称 排序方式)    举例  (vla-sort ss 'EffectiveName > )  按块名排序
;假如排序属性是列表的话
;(vla-sort 选择集  ‘(属性名称  要比较的第几个位置) 排序方式)   举例   (vla-sort ss  ’(InsertionPoint 1)  < )  按插入点排序,1是X,2是Y ,3是Z坐标
  1. (defun vla-sort  (ss mark syb / ns sl)
  2.   (setq  ns (ssadd) sl nil)
  3.   (setq i -1)
  4.   (repeat (sslength SS)
  5.     (setq sl (cons (ssname SS (setq i (1+ i))) sl))
  6.     )
  7. (cond
  8. ((= (type mark) 'SYM)
  9.   (setq  sl
  10.    (vl-sort
  11.      sl
  12.      (function
  13.        (lambda (X Y)
  14.          (Syb
  15.      (vlax-get (vlax-ename->vla-object X)  mark)
  16.      (vlax-get (vlax-ename->vla-object Y)  mark)
  17.      )
  18.          )
  19.              )
  20.            )
  21.          )
  22. )
  23. ((= (type mark) 'LIST)
  24.   (setq  sl
  25.    (vl-sort
  26.      sl
  27.      (function
  28.        (lambda (X Y)
  29.          (Syb
  30.   (NTH (1- (CADR mark))   (vlax-get (vlax-ename->vla-object X) (car mark)))
  31.   (NTH (1- (CADR mark))   (vlax-get (vlax-ename->vla-object Y) (car mark)))
  32.      )
  33.          )
  34.              )
  35.            )
  36.          )
  37. ))
  38.   (foreach x sl (setq ns (ssadd x ns)))
  39.   )
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-11-5 10:22 | 显示全部楼层
这是内部定义的函数,是用C++做出来的。
发表于 2015-11-5 11:49 | 显示全部楼层
你这个问的应该叫函数的可选参数,目前lisp的自定义函数是直接无法解决的。
可以采用表传递的方式来控制可选参数,也就是说自定义函数后面是表。
也可以参考不死猫的帖子。

如果非要和rtos 这样的函数类似,就必须通过c++的arx或c#.net,vb.net来自定义内部函数。
arx版本不限,.net只有2007之上才可以,06没有自定义lisp函数功能。

简单说说.net定义可选参数的原型,也是将函数后面的所有参数作为一个数组(可以理解为表)传递给函数内部计算。其实和用lisp自定义函数的表是一个道理。只不过多了表这个括号。

发表于 2020-12-16 10:08 | 显示全部楼层
好贴,虽然不懂讲的是啥,但是感觉学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 19:59 , Processed in 0.201252 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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