请看下面的一句代码,谁知道说的是什么?
-
- (set (read (strcat "a" "B")) (lambda(x) (* x 2)))
AutoLisp中,定义一个用户函数使用defun,而对变量赋值使用setq或set,setq和set又有不同,看帮助文件,setq比较好理解,但set就有点让人糊涂了,不过说白了其实也很简单,就是可以对“计算出来的”变量名赋值。
在回来说上面的代码,换一个方式可以写成:
(setq ab (lambda(x) (* x 2))
这还是一个赋值的概念,那么,再换一个写法:
(defun ab(x) (* x 2))
这回容易看了吧?其实就是定义了一个函数,不信你输入“(ab 3)”试试。
再来两句代码:
(defun ab(x) (* x 2))
(setq ac ab)
这时,你再输入“(ac 3)”试试。
其实,不管是赋值还是定义,其实都有相通之处,这个相通之处就是都是对一个变元名进行赋值,只不过赋值的内容有不同,defun是赋值一个计算过程(函数),而setq和set则更擅长赋值一个值或简单计算。
好了,不多说了,最后要说的是,新手往往不太在意变量与函数,所以会有变量名和函数名冲突的问题,导致程序出错或运行失败,而很多朋友即使知道函数名和变量名不能重复,却也不知所以,因而,弄句代码,给还不太清楚的朋友理解一二,其实没有多少实际用途,趣味而已。
|