caoyongjun 发表于 2024-10-28 19:26:39

函数套函数中的选择问题

(DEFUNc:A1 (/ ss )
(SETQ SS (SSGET));用这个选择集
(setq err (vl-catch-all-apply 'hs-autoDim (list nil)))

(C:Y)
)
怎么将A1中的 定义的sst选择集,应用到以下的所有的子函数中去,不用重复选择


---------------------------------------------------
(DEFUN C:Y()
(setq err (vl-catch-all-apply 'hs-autoDim (list nil)))
)
此处引用hs-autoDim函数
---------------------------------------------------


---------------------------------------------------
(defun hs-autoDim (jianxiang/ ss)
(setq maxbox (hs-maxbox ss)))
此处引用hs-maxbox函数 选择集用 A1中的ss
---------------------------------------------------


---------------------------------------------------
(defun hs-maxbox (ss /lst ll ur s1p minx miny maxx maxy x)
(setq lst (HS-SS->LIST ss))
此处引用HS-SS->LIST函数 选择集用 A1中的ss
---------------------------------------------------


---------------------------------------------------
(defun hs-ss->list (ss / n i lst s1)
(setq n (sslength ss))
此处sslength选择集用 A1中的ss
)
---------------------------------------------------

kozmosovia 发表于 2024-10-28 20:19:17

先按照逻辑全部写成一个函数,这lisp基础就用子函数,子函数还就一句话,意义何在?

飞雪神光 发表于 2024-10-28 20:24:48

这是引用自定义函数的问题吧(defun c:a1 (/ ss )
(setq ss (ssget));用这个选择集
(setq err (vl-catch-all-apply 'hs-autoDim (list SS)))
)
(defun hs-autoDim (ss/ maxbox)
        (setq maxbox (hs-maxbox ss))
)
(defun hs-maxbox (ss /lst ll ur s1p minx miny maxx maxy x)
        (setq lst (HS-SS->LIST ss))
)
(defun hs-ss->list (ss / n i lst s1)
        (setq n (sslength ss))
        (print n)
        (princ)
)

caoyongjun 发表于 2024-10-29 07:25:48

kozmosovia 发表于 2024-10-28 20:19
先按照逻辑全部写成一个函数,这lisp基础就用子函数,子函数还就一句话,意义何在?

我省略了很多没复制

caoyongjun 发表于 2024-10-29 07:28:39

我需要的是怎么把我在主程序中的选择集ss应用到,其他的子函数中去

caoyongjun 发表于 2024-10-29 07:29:53

其他的自定义函数都在y这个命令中。

自贡黄明儒 发表于 2024-10-29 07:37:48

caoyongjun 发表于 2024-10-29 07:28
我需要的是怎么把我在主程序中的选择集ss应用到,其他的子函数中去

主程序返回ss,那么你就可以应用到其它函数了。

maghreb 发表于 2024-10-29 08:11:31

(defun hs-autoDim (jianxiang/ ss) 此处不写ss呢?

tryhi 发表于 2024-10-29 10:03:13

除了(defun hs-autoDim (jianxiang/ ss)去掉ss,其他照参数传

llsheng_73 发表于 2024-11-3 15:03:08

本帖最后由 llsheng_73 于 2024-11-3 15:18 编辑

如果后边这些函数都只是为前边的服务,别的地方不会调用它们,可以去掉它们的参数,直接引用调用它们的地方定义的变量,让局部变量成为范围内全局变量使用,不会成为真正的全局变量

(defun c:tt(/ a b c)
(and(setq a(getreal))
      (setq b(getreal))
      (setq c(getreal))
      (t1)
      (t2)
      (t3)))

(defun t1()
(>(+ a b)c))
(defun t2()
(>(+ a c)b))
(defun t3()
(>(+ b c)a))
这是比较偷懒的做法,如果后续那些函数过程中不会修改参数变量,这样做也没什么不可以,但容易形成不好的习惯,正确的做法是,把引用到的变量都设置成参数,
(defun c:tt(/ a b c)
(and(setq a(getreal))
      (setq b(getreal))
      (setq c(getreal))
      (t1 a b c)
      (t2 a b c)
      (t3 a b c)))

(defun t1(i j k / a)
(setq a(>(+ i j)k)))
(defun t2(l m n / b)
(setq b(>(+ l n)m)))
(defun t3(d e f)
(>(+ e f)d))
页: [1] 2
查看完整版本: 函数套函数中的选择问题