无痕 发表于 2007-2-19 03:14:00

(x^ a n) = 求a的n次方

本帖最后由 作者 于 2007-2-19 3:14:46 编辑 <br /><br /> <p></p>

alin 发表于 2007-2-19 08:47:00

(EXP (* n (LOG a)))

NetBee 发表于 2007-2-20 10:39:00

本帖最后由 作者 于 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
_$

highflybir 发表于 2007-2-20 12:58:00

本帖最后由 作者 于 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;

tcsl9621 发表于 2007-2-24 10:30:00

好帖子,顶。

highflybir 发表于 2007-2-25 12:39:00

<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")&nbsp; 结果为 .</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]
查看完整版本: (x^ a n) = 求a的n次方