狂刀无痕
发表于 2007-7-26 13:41:00
本帖最后由 作者 于 2007-7-26 13:59:31 编辑 <br /><br /> <p>没注意看你的test的计数器.你的结果没错,我的结果也没错.是我看错了</p><p>我是从1开始算.你是从0开始.</p><p>计算机计数是从0开始---没有这个规定. 只是lisp的函数大多从0开始计数.但是也不是绝对.</p><p>比如 sslength ,strlen就是从1开始算的. nth 是从0开始算.</p><p></p><p>至于</p><p>自定义函数套用到字符串表达式里面,及其它和cad或lisp的交互不是vb or c 的优势,前面已经说过,vb c 只管计算就好了.</p><p>特点就是两个:</p><p>1.可以不必转换格式</p><p>2.可以直接套用vb的数学函数,比lisp提供的丰富.</p><p>至于计算方程式,vb只能比lisp更强. 曾有个笑话.说比尔windows系统核心都是用vb写的,虽然我也不信,但至少说明vb能做不少的事.</p><p>比如解n元方程,网上都有不少的vb实例,但是用lisp写,恐怕很困难(我没试过,也不说绝对不行).</p><p>最后,我的观点:</p><p>1. .按1楼楼主的要求,用vb(或lisp调用vb)很容易实现.</p><p>2. vb或其它语言比lisp在大量运算上有优势,就看你怎么利用.</p><p>3. 条条大路通罗马,并不是说lisp就不行.(其实我lisp倒是写过不少,而vb不过是门外汉).lisp有它的优势,vb也有它的优势.合理地利用才能有利于提高工作效率.</p><p>这次我也是提供了另外一种思路而已.大家讨论讨论,没别的意思,不要搞的太紧张.hehe</p><p></p>
狂刀无痕
发表于 2007-7-26 14:07:00
本帖最后由 作者 于 2007-7-26 14:13:46 编辑 <br /><br /> <p>另外,对1楼楼主的要求,再提供一种方法.用vbs.不知道算不算简单明了.大家一起探讨.</p><p>(setq wcs (vla-GetInterfaceObject (vlax-get-acad-object) "ScriptControl"))<br/>(vlax-put-property wcs "language" "vbs")<br/>(vla-eval wcs "1+4+5*2+(5+5)/2+((6+6)/2+(5+5)/2)") ;返回 ->31.0</p>
zml84
发表于 2007-7-30 11:39:00
13楼的代码 ,在测试中发现有误:
_$ (TRANS_FORMAT "-7*(-1-4+8)")
(- nil (* 7.0 (+ (- -1.0 4.0) 8.0)))
_$ (TRANS_FORMAT "-7*(-1-4+8)")
(- nil (* 7.0 (+ (- -1.0 4.0) 8.0)))
_$ (TRANS_FORMAT "-7-(-1-4+8)")
(- (- nil 7.0) (+ (- -1.0 4.0) 8.0))
_$
无痕
发表于 2007-7-31 04:19:00
(defun tt (str)
(setq wcs (vla-GetInterfaceObject (vlax-get-acad-object)
"ScriptControl"
)
)
(vlax-put-property wcs "language" "vbs")
(vla-eval wcs str)
)
(tt "-7*(-1-4+8)") ;返回: -21
飞诗(fsxm)
发表于 2008-8-7 12:27:00
<p>回23楼<strong><font face="Verdana" color="#61b713">zml84</font></strong>:</p><p>呵呵以前忘了看这个贴子,现在看到了~的确是这样的呢~</p><p>解决方法为:在第一个子函数<font color="#0033ff">format1</font>前加上一行代码:<font color="#ff0000">(setq lastfun "(")</font></p><p>结果如下:</p><p>(defun <font color="#0033ff">format1</font> (str / char funs lastfun lst tmp lastchar)<br/> <font color="#ff0000">(setq lastfun "(")</font><font color="#ff0000"> ....</font></p><p>后面的都不动...</p><p>现在可以测试:<br/>(trans_format "-7*(-1-4+8)")=>(* -7.0 (+ (- -1.0 4.0) 8.0))<br/>(eval (trans_format "-7*(-1-4+8)"))=>-21.0</p>