nonsmall 发表于 2009-1-21 15:19:00

[分享]小猫自学成长月记--vLisp快速晋级之道

本帖最后由 nonsmall 于 2013-5-13 11:38 编辑 <br /><br /><p>我先简单说一下对Lisp语言的理解和我的学习方法(有错误请大家批评指正)再说几个月的自学进程.</p><p>Lisp语言的语法总结:<br/>1 括号成对<br/>2 任意一个括号都有且只有一个返回值 所以任意一对括号可以看做一个变量<br/>3 括号内形式: 一个函数 + 参数(个数不定)<br/>4 参数可以是变量 可以是任意() 只是值类型不同 个数不同而已<br/>----------<br/>你理解上面的规则 写Lisp就不会有太多错误 可以随心所欲</p><p>例1:<br/>(defun c:tt()(print 1))<br/>因为()=nil<br/>所以(defun c:tt nil (print 1))合法</p><p>例2:<br/>(ssget nil)合法所以函数里面可以加提示<br/>(ssget (car (list nil (print "请选择"))))</p><p>例3:<br/>CAD有内置对话框如何用lisp操作?<br/>过滤选择0层图元:<br/>(Vlax-Invoke-Method (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'SendCommand (car (list "Qselect "<br/>(Vlax-Invoke-Method (Vlax-Get-Or-Create-Object "WScript.Shell" ) 'Sendkeys "%p{DOWN}{Enter}"))))</p><p>例4:<br/>获得lwpline多线顶点坐标<br/>(vl-remove-if 'not (mapcar '(lambda (x) (if (= (car x) 10) (cdr x))) (entget(car(entsel)))))</p><p>例5:<br/>把反应器回调函数集成在反应器里<br/>(setq rector (vlr-mouse-reactor nil (list (vl-list* :vlr-beginRightClick (defun test (a b)(print a)(print b))))))</p><p>--------------</p><p>学习方法小结:</p><p>1 注重开发效率<br/>一切电脑上的操作皆可简化: AUTOCAD简化绘图 编程简化AUTOCAD操作 编程本身也可以简化 一切重复性的电脑操作皆可简化 一切复杂的电脑操作皆可简化(包括写代码 调试) 这是我开发效率比常人高的主要原因 意味着我有更多的时间学习新的知识 思考更快的开发方法</p><p>2 看书要快<br/>知道有这个函数 有这个方法即可 不需死记 需要时回头找找 时间一长就记住了</p><p>3 多学多问多看<br/>现在玩Lisp真的很幸福,一般Lisp能做的事情网上都有答案,你总会找到比你写的更好的代码或者"居然这样也行?"的方法.<br/>你知道有多少种不同的Lisp写法一句话实现简单的(command "line" '(0 0) '(1 1) "")完全相同的结果?<br/>我想到不同的方法最少有9个<br/>注:把'(0 0)改成(list 0 0)或"0,0"之类不算数的<br/>开阔视野的好处是会让你的路越走越宽</p><p>4 组建个人函数库<br/>自己清楚自己的需求 理解自己的函数 平时有空写点自己的函数或者把最近代码中的精华提炼出来 现在是制造 时间一长 自己的函数多起来 再写东西只需组装就行了 当然注释和整理更重要 这也算第一点的延伸吧(把代码简化为一个函数)</p><p>因为个人情况不同 想法不同 我个人是喜欢开发效率 如果你更看重代码执行效率 也可以谈一下.</p>

shcvip 发表于 2017-8-6 23:12:08

把最近代码中的精华提炼出来,谢谢毛老师的建议。

maxli 发表于 2017-8-13 13:08:59

为什么要离开?

maxli 发表于 2017-8-7 08:02:00

猫准备去哪里?:funk:

nonsmall 发表于 2009-1-21 15:22:00

Lisp语言探索心得:

本帖最后由 作者 于 2009-1-23 17:26:33 编辑 <br /><br /> <p>语言是相通的 Lisp和汉语 英语本质上没什么区别<br/>都是用来转换思想表达的一种方式<br/>只要你汉语会说 学编程不是难事</p><p>前面说了Lisp函数的学习方法<br/>VLA-开头的函数虽然多 但是更不需要背<br/>你只需要理解概念这些函数就都会用了</p><p>什么是对象?<br/>你能画出来 能操作到的都可以算<br/>对象可以包含子对象 子对象也可以找到父对象<br/>但对任何对象的操作都需要从根对象入手<br/>AutoCAD根对象的取得有2种方式<br/>最正常的是(Vlax-Get-Acad-Object)<br/>在其他情况可以这样(Vlax-Get-Object "Autocad.Application")</p><p>什么是属性?<br/>对象的特性,如颜色 线型 图层等信息<br/>有3种方式可以取得属性<br/>(vla-get-属性 对象)<br/>(vlax-get 对象 '属性)<br/>(vlax-get-property 对象 '属性)<br/>设置属性:<br/>(vla-put-属性 对象 值)<br/>(vlax-put 对象 '属性 值)<br/>(vlax-put-property 对象 '属性 值)<br/>注: '属性 等价于 "属性"</p><p>什么是方法?<br/>对象可以进行的操作<br/>有3种方式可以使用方法<br/>(vla-方法 对象 [可能的参数])<br/>(vlax-invoke 对象 '方法 [可能的参数])<br/>(vlax-invoke-method 对象 '方法 [可能的参数])<br/>注: '方法 = "方法"</p><p>如果你觉得这些太抽象 可以使用我的<font color="#000000" style="BACKGROUND-COLOR: #ffff00;"><a href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=72611&amp;replyID=&amp;skin=1">小助手</a></font>试试<br/>它会帮你写出一些代码 并且理解上面的内容<br/>上面每个都有3种方法 在使用中你会发现他们的不同</p><p>关于反应器:<br/>只是特定的代码格式<br/>加载后会在特定的时候触发Lisp(只是这个触发不是人的主观操作而已)</p><p>关于VBA:<br/>玩Lisp真的要多少了解下VBA<br/>可以通过eval来使用 配合自定义变量 词典 xdata等返回值<br/>多行语句可以用:分隔<br/>很多时候可以帮你节省很多工作时间(三楼提供例子)<br/>比如混合运算:<br/>(vla-eval (vlax-get-acad-object) (strcat "s=3:s=s*s+s/\s-(2+5):msgbox s"))</p><p>==========================================<br/>之前我心存疑问:想知道vlisp到底能干什么 最强能实现什么功能?<br/>.bat .vbs .js .hta VBA .....Lisp都可以弄<br/>语言作为工具能做什么不重要 重要是它擅长干什么<br/>因为 每种语言都有其瓶颈有其优缺 择优而用才是正道<br/>二次开发的目的是提高生产力<br/>用什么语言做什么功能还要看你的需求<br/>每个人情况不同 这里就不多说了<br/>但是走出Lisp看看外面的世界<br/>你会发现很多精彩</p>

nonsmall 发表于 2009-1-21 15:29:00

本帖最后由 作者 于 2009-1-22 10:45:22 编辑 <br /><br /> <p>下面是一点点代码</p><p>奇怪现在感觉自己没什么能拿出手的了 :(</p><p></p><p>9种方法答案:<br/>command<br/>sendcommand<br/>vl-cmdf<br/>vla-eval &nbsp;(VBA语句)<br/>vlax-invoke(vlax-invoke-method)<br/>vla-addline<br/>sendkeys &nbsp;(键盘模拟)<br/>entmake<br/>^C^C_line;0,0;1,1;;&nbsp;(菜单宏)</p>

carrot1983 发表于 2009-1-21 15:42:00

<p>即将告别。。。</p><p>祝福猫。。。</p><p></p><p></p>

tyxdd 发表于 2009-1-21 16:00:00

老猫,顶你,很崇拜你。

zml84 发表于 2009-1-21 18:34:00

"改个图元计算几个数" ,绝非这么简单。

nonsmall 发表于 2009-1-21 19:22:00

zml84发表于2009-1-21 18:34:00static/image/common/back.gif\"改个图元计算几个数\" ,绝非这么简单。

<p>好吧 我的话不够严谨 更正下&nbsp;但我没有小看Lisp的意思</p><p>语言各有其价值</p>

oyxx1023 发表于 2009-1-21 19:30:00

CONTINUE....

caoyin 发表于 2009-1-21 21:11:00

<p>为什么要离开?大家要想你的!!</p>

lljj 发表于 2009-1-21 22:46:00

猫,你还回来吗?
页: [1] 2 3 4 5
查看完整版本: [分享]小猫自学成长月记--vLisp快速晋级之道