明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3148|回复: 10

[已解答] 函数调用问题

[复制链接]
发表于 2014-8-12 15:29 | 显示全部楼层 |阅读模式
RT小弟是个新手刚开始学AUTOLISP想请教下这样一个问题

(defun C:M1(C)
  (setq a (getreal "A")
   b (getreal "B")
   w (+ A B C)
   X (* a b C)  
        )
(print x)
  (print w)
  (princ)
)

假如我想直接调用该这么调用啊,调用的时候C可以赋值吗
比如M1(3)这样的调用方式是错的,那我应该如何调用呢
发表于 2014-8-12 16:08 | 显示全部楼层
本帖最后由 Kye 于 2014-8-12 16:15 编辑

(DEFUN M1 (C / A B W X)
  (setq        a (getreal "A=")
        b (getreal "B=")
        w (+ A B C)
        X (* a b C)
  )
  (princ (strcat "W=" (rtos W)))
  (PRINC "\n")
  (princ (strcat "X=" (rtos x)))
  (princ)
)

;;_$  (M1 3)

不是很清楚想要什么,如果是获取W 可用下面这个

(DEFUN M1 (C / A B W X)
  (setq a (getreal "A=")
b (getreal "B=")
w (+ A B C)
X (* a b C)
  )

  (princ)
  W
)

;;;;;_$  (M1 3)

 楼主| 发表于 2014-8-12 19:14 | 显示全部楼层
Kye 发表于 2014-8-12 16:08
(DEFUN M1 (C / A B W X)
  (setq        a (getreal "A=")
        b (getreal "B=")

高手您好,我的意思是比如我调用函数是DEFUN C:M1()时,
我直接输入M1就可以运行了对吧
现在我定义的函数是DEFUN C:M1(x)
里面的X参与了后面的计算,那么我直接调用的时候可以直接给X赋值吗
比如M1(3)我这个时候直接给相当于X=3,那么这样可以吗?如果可以我该如何调用跟?
发表于 2014-8-12 21:22 来自手机 | 显示全部楼层
krush13 发表于 2014-8-12 19:14
高手您好,我的意思是比如我调用函数是DEFUN C:M1()时,
我直接输入M1就可以运行了对吧
现在我定义的函 ...

建议看看我的《认识自定义函数》,在数字签名里有,或许能有帮助。

点评

Kye
都惊动了ll_j大大,Z版两位老师了,谢谢两位老师,终于理解了蒙面函数lambda  发表于 2014-8-13 09:14
发表于 2014-8-12 21:39 | 显示全部楼层
  1. (defun C:M1()
  2. (setq c (getreal "\n输入变量C="))
  3. (m1 c)
  4. (princ)
  5. )
  6. (defun m1 (c)
  7. (setq a (getreal "A=")
  8.        b (getreal "B=")
  9.        w (+ A B C)
  10.        X (* a b C)  
  11. )
  12. (print x)
  13. (print w)
  14. )
 楼主| 发表于 2014-8-12 22:24 | 显示全部楼层
ZZXXQQ 发表于 2014-8-12 21:39

程序我懂。我的意思是向C语言一样直接用函数调用行不行,看来是不行么。。。

点评

用的是LISP,不是C。要按LISP的规则。  发表于 2014-8-13 07:59
发表于 2014-8-12 22:25 | 显示全部楼层
本帖最后由 Kye 于 2014-8-13 08:48 编辑

我绝对新手,您那种C:M1(x)我也不知道可以不可以,请其他大侠帮忙解析下;下面这几种我用过,第四种尽量别用,第一种、第三种或许就是您说的那种直接调用
;;;1.调用命令
(defun c:ba (/ a b c)
  (setq        a (getint)
        b (getint)
  )
   (setq c (+ a b))

  c;;供调用
)

(defun c:b1 (/ d)
  (setq d (c:ba));;调用(c:ba)
)
;;;b1命令调用了ba命令
;;;;;____________________

;;2. 调用函数******
(defun  ba ( a / b c);; a 为外部变量
  (setq        ;;a (getint)
        b (getint)
  )
   (setq c (+ a b))

  c;;供调用
)


(defun c:b2 (/ z d )
  (setq z 9)
  (setq d (ba z ));;调用ba函数;调用此函数时Z也参与运算

)

;;;;;____________________
;;3. 调用函数******
(defun  ba ( / a b c);;
  (setq         a (getint)
        b (getint)
  )
   (setq c (+ a b))

  c;;供调用
)


(defun c:b3 (/  d )
  ;(setq z 9)
  (setq d (ba ));;调用ba函数;调用此函数时Z也参与运算

)

;;;;;____________________
;;4. 调用函数******
(defun  ba ( a / b c);; a 为外部变量
  (setq        ;;a (getint)
        b (getint)
  )
   (setq c (+ a b))

  c;;供调用
)

(setq ss 3)
(defun c:b4 ( / d );;SS为全局变量
    (setq d (ba ss ));;调用ba函数,ss也参与了运算
)
 楼主| 发表于 2014-8-12 22:25 | 显示全部楼层
ll_j 发表于 2014-8-12 21:22
建议看看我的《认识自定义函数》,在数字签名里有,或许能有帮助。

我的意思是能不能向C语言一样比如放f(3)这样直接调用,好像不行吧。。都是在函数里调用
 楼主| 发表于 2014-8-12 22:47 | 显示全部楼层
Kye 发表于 2014-8-12 22:25
我绝对新手,您那种C:M1(x)我也不知道可以不可以,请其他大侠帮忙解析下;下面这几种我用过,第四种尽量别用 ...

你好,交流下经验嘛,您发的这个我收获挺多的~
不过我的意思是比如我再CAD窗口里运行程序M1
一般是直接输入M1吧,这时候函数一半定义成M1()
但是假如我定义的是M1( A B C)这样子的,
我再CAD那个窗口里该这么输入咧。。。

点评

按lisp规则:(m1 a b c)  发表于 2014-8-13 07:58
发表于 2014-8-13 09:00 | 显示全部楼层
krush13 发表于 2014-8-12 22:25
我的意思是能不能向C语言一样比如放f(3)这样直接调用,好像不行吧。。都是在函数里调用

Lisp有自己的语法规则,函数的调用都是在括号中,一般情况下,默认括号中第一个出现的元素就是函数,后面是参数,像C中的f(3)调用,在Lisp中的语法是(f 3)。
定义函数时,一般定义外部函数使用C:开头,这是一种特殊说明,Lisp中会把这个外部函数按“命令”解释,使用时不需要带C:前缀,不过这样的函数也仍旧是函数,还可以按函数的规则使用,比如本例的C:M1,有参数,所以直接以命令方式输入M1是不行的,也不能输入M1(3),正确的使用方式是输入(c:m1 3),当作内部函数使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 05:17 , Processed in 0.209902 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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