- 积分
- 3449
- 明经币
- 个
- 注册时间
- 2010-9-4
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
最后一个问题,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))
|
|