(x^ a n) = 求a的n次方
本帖最后由 作者 于 2007-2-19 3:14:46 编辑 <br /><br /> <p></p> (EXP (* n (LOG a))) 本帖最后由 作者 于 2007-2-20 11:51:10 编辑呵呵,还能这么求呀!vla-eval函数真是强大呀!!!!!
由此可得扩展到对基本的算术表达式求值呀:(defun op (a)
(vla-eval (vlax-get-acad-object)
(strcat "ThisDrawing.SetVariable \"users1\",cstr("a")")
)
(read (getvar "users1"))
)
算例:_$ (op "2+3-3*5")
-10
_$
本帖最后由 作者 于 2007-2-20 14:13:19 编辑
好思路,感谢无痕和NetBee又为我们提供了一种方法。
---这样的话cal函数(自己定义的cal函数)就可以计算弧度值了,而不是默认的角度值。
(defun fun (a x / a)
(while (Wcmatch a "*x*")
(setq a (vl-string-subst (rtos x 2 20) "x" a))
)
(vla-eval
(vlax-get-acad-object)
(strcat "ThisDrawing.SetVariable \"users1\",cstr(" a ")"))
(read (getvar "users1"))
)
例如fun(x^2-3*x+21)返回值为0;
好帖子,顶。 <p><font face="Courier New" color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/read.htm" target="_black"><font face="Courier New" color="#0000ff">read</font></a><font face="Courier New">
<font color="#ff0000">(</font></font><a href="http://www.mjtd.com/object/autolisp/getvar.htm" target="_black"><font face="Courier New" color="#0000ff">getvar</font></a><font face="Courier New">
<font color="#ff00ff">"users1"</font><font color="#ff0000">)</font><font color="#ff0000">)</font></font></p><p><font face="Courier New"><font color="#ff0000">建议把这句改为 (atof (getvar "users1"))</font></font></p><p><font face="Courier New"><font color="#ff0000">因为这个程序是通过VBA来解释表达式的。请看下面的区别:</font></font></p><p><font face="Courier New"><font color="#ff0000">(read "-.123") 结果为:-</font></font></p><p><font face="Courier New"><font color="#ff0000">(read ".123") 结果为 .</font></font></p><p><font face="Courier New"><font color="#ff0000">这显然不是我们需要的,如果放到lisp程序中,就可能出错。</font></font></p><p><font face="Courier New"><font color="#ff0000">而改为:</font></font></p><p><font face="Courier New"><font color="#ff0000">(atof "-.123") 结果为:-0.123</font></font></p><p><font face="Courier New"><font color="#ff0000">(atof ".123") 结果为:0.123</font></font></p><p><font face="Courier New"><font color="#ff0000">显然这样做更合理。</font><br/></font></p>
页:
[1]