krush13 发表于 2014-8-12 15:29:49

函数调用问题

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)这样的调用方式是错的,那我应该如何调用呢

Kye 发表于 2014-8-12 16:08:55

本帖最后由 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)

krush13 发表于 2014-8-12 19:14:30

Kye 发表于 2014-8-12 16:08 static/image/common/back.gif
(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,那么这样可以吗?如果可以我该如何调用跟?

ll_j 发表于 2014-8-12 21:22:39

krush13 发表于 2014-8-12 19:14
高手您好,我的意思是比如我调用函数是DEFUN C:M1()时,
我直接输入M1就可以运行了对吧
现在我定义的函 ...

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

ZZXXQQ 发表于 2014-8-12 21:39:24

(defun C:M1()
(setq c (getreal "\n输入变量C="))
(m1 c)
(princ)
)
(defun m1 (c)
(setq a (getreal "A=")
       b (getreal "B=")
       w (+ A B C)
       X (* a b C)
)
(print x)
(print w)
)

krush13 发表于 2014-8-12 22:24:43

ZZXXQQ 发表于 2014-8-12 21:39 static/image/common/back.gif


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

Kye 发表于 2014-8-12 22:25:07

本帖最后由 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. 调用函数******
(defunba ( 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. 调用函数******
(defunba ( / 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. 调用函数******
(defunba ( 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也参与了运算
)

krush13 发表于 2014-8-12 22:25:31

ll_j 发表于 2014-8-12 21:22 static/image/common/back.gif
建议看看我的《认识自定义函数》,在数字签名里有,或许能有帮助。

我的意思是能不能向C语言一样比如放f(3)这样直接调用,好像不行吧。。都是在函数里调用

krush13 发表于 2014-8-12 22:47:59

Kye 发表于 2014-8-12 22:25 static/image/common/back.gif
我绝对新手,您那种C:M1(x)我也不知道可以不可以,请其他大侠帮忙解析下;下面这几种我用过,第四种尽量别用 ...

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

ll_j 发表于 2014-8-13 09:00:14

krush13 发表于 2014-8-12 22:25 static/image/common/back.gif
我的意思是能不能向C语言一样比如放f(3)这样直接调用,好像不行吧。。都是在函数里调用

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