wanchr 发表于 2019-10-27 11:10:09

问个低级的问题

defun c:t1(),这个我知道加载后,命令行t1后就能运行那这个defun c:t2(a) 那这个要怎么输命令行 t2呢?
再就是defun c: t3( b / c) 中b如果是个坐标 怎么输入,
谁来个提示a b c 变量要怎么传进去
谢谢了!

wyl219 发表于 2019-10-27 11:45:36

(defun c:t1(/ x y))这样定义的是一个命令(defun t2(z / x y))这样定义的是一个函数

命令是不能传入参数的,如果需要在命令运行时获取参数有要么把参数写死到程序里,要么在程序运行过程中提醒用户输入\选择数据,要么就写配置文件,有时候我也会留一个变量不设为局部变量,下次直接用,但是可能会有bug.
函数不一样,函数可以在运行前传入参数,但是命令可以在cad中直接输入命令名t1运行,函数不可以,需要以(t2 z)的方式调用,注意括号.

wyl219 发表于 2019-10-27 11:56:20

另外(defun t2(z / x y)),参数列表/后的x y代表的是局部变量,在函数调用的时候并不接收参数,在运行结束后将该变量设为nil.
但是不等同于:
(defun t2(z / )
.......
(setq x nil y nil))
区别在于局部变量会新建两个变量,而不会冲掉外部的变量定义,例如以下两个程序:
(defun c:t1 ( /)
(setq x 1)
        (defun t2 ( / x )
                (setq x 2)
                (princ x)
        )
        (t2)
        (princ x)
        (princ)
)
(princ)
__________

(defun c:t3 ( /)
(setq x 1)
        (defun t2 ( /)
                (setq x 2)
                (princ x)
        )
        (t2)
        (princ x)
        (princ)
)
(princ)
_____
运行t1返回的是22,运行t3返回的是21


wanchr 发表于 2019-10-27 12:20:13

谢谢你,有一丝丝懂了解了

wyl219 发表于 2019-10-27 12:41:22

最后一个问题,lisp跟其他语言不太一样,数据有类型,变量没有类型.
例如vb,定义变量的时候需要定义数据类型(初始化前可以不定义),例如
dim a as int
a="1"
会报错,因为a是int类型,不能赋值为字符串.
而lisp不存在这个现象.
(setq a 1)
(setq a "1")
(princ (type a))
打印出来的是STR.
因此想要传入坐标,就直接传入坐标就好了.
需要注意的是,坐标本身其实是一个表(list).例如
(defun t4(pt / )
        (getpoint p4)
)
可以这样调用(t4 (list 0 0 0))

或者也可以这样(t4 '(0 0 0))
由于lisp的自由性,可以实现很多功能,例如可以传入多种类型的参数,经过判断走不同流程,整合多个程序.例如
(defun a+1(a /)
        (cond
                ((member(type a) (list 'INT 'REAL))
                        (1+ a))
                (cons (= 'STR(type a))
                        (1+ (atof a)))
                (t
                        (princ "确认参数a是否错误"))
        )
)
当a为int,real或者str类型的数字时,均能正确执行.


另外,由于lisp不能直接定义可选参数,也可以通过这一特性实现.例如下面这个没有实际用途的示例
(defun max1( a b c)
        (max a b c)
)

lisp限定的max1只能接收3个参数,不能多也不能少,即(max1 1 2)和(max1 1 2 3 4)都是错误的,但是可以稍微改动一下
(defun max2(a)
   (apply 'max a)
)

此时max虽然只能有一个参数,但是可以以这样的方式传入多个参数
(max2 (list 1 2 3 4 5))

sunny_8848 发表于 2019-10-27 13:03:54

多谢讲解,菜鸟的福音
页: [1]
查看完整版本: 问个低级的问题