wyd 发表于 2005-4-19 22:07:00

各位高手来帮忙指点错在哪了

我这学期刚学visual lisp, 老师抄了个程序,我回来却运行不出来,加载后说defun语法错误,怎么回事呀?       


( defun gp : getpoint       Input (/ Startpt Endpt Halfwidth)<BR>       ( if ( setq Startpt ( getpoint "\n Start point of path :"))<BR>                       ( if (       setq Endpt (getpoint Startpt "\n Endpoint of path:"))<BR>                                       <BR>                                       (if (setq Halfwidth ( getpoint Endpt "\n Half width of path:"))<BR>        ( list<BR>               (cons 10 Startpt)<BR>               (cons 11 Endpt)<BR>               ( cons 40( * Halfwidth 2.01)<BR>               (cons 50 ( angle Startpt Endpt))<BR>               (cons 41 ( distance Startpt Endpt))<BR>               ))))))

didini 发表于 2005-4-19 22:22:00

这样看看不清楚,以lsp附件的形式传上来吧!不过我看中间是不是空格太多了!??

meflying 发表于 2005-4-20 08:30:00

这是帮助文件中的原代码:


(defun gp:getPointInput ( / StartPt EndPt HalfWidth )<BR>......


抄的时候要仔细了,看看哪儿出了问题...

wyd 发表于 2005-4-20 21:42:00

我 按<A name=24904><FONT color=#990000><B>meflying</B></FONT></A>说的改了,可以加载但运行时提示未知命令,怎么回事啊?


ljpnb 发表于 2005-4-20 21:55:00

有几处错误:


(defun gp:getPointInput        (/ StartPt EndPt HalfWidth)<BR>       (if (setq Startpt (getpoint "\n Start point of path :"))<BR>                       (if        (setq Endpt (getpoint Startpt "\n Endpoint of path:"))


                                       (if (setq Halfwidth (getdist Endpt "\n Half width of path:"));_看程序的意思应该用getdist,而不是getpoint<BR>        (list<BR>               (cons 10 Startpt)<BR>               (cons 11 Endpt)<BR>               (cons        40 (* Halfwidth 2.01));_少了一个右括号<BR>               (cons 50 (angle Startpt Endpt))<BR>               (cons 41 (distance Startpt Endpt))


        )<BR>                                       )<BR>                       )<BR>       )<BR>)

wyd 发表于 2005-4-20 23:08:00

谢谢各位!我再试试.

meflying 发表于 2005-4-21 08:20:00

5楼不应该这么改吧,11对应的是点,应该没有问题...这是帮助文件中例子的一个函数,建议楼主在没有弄懂的情况下不要这样拿出来用的...


命令定义是(defun c:xxx...而上面的是(defun gp:xxx...


这是个函数,供程序中其它地方调用,而不是单独使用的

ljpnb 发表于 2005-4-21 08:31:00

飞哥,我改得哪儿不对啊,改之前我没看过帮助文件,现在去翻帮助文件,给我找到了这个例题:


<P class=body>下面是 gp:getPointInput 函数修改后的版本。在这个版本中,调用了名为 cons(construct a list 的缩写)的 AutoLISP 函数来为关联表中的子表加上关键字。可将这个版本的函数定义复制到控制台窗口中,按 ENTER 键,然后再次运行 (gp:getPointInput):

<PRE class=prog_in_0>(defun gp:getPointInput        (/ StartPt EndPt HalfWidth)</PRE><PRE class=prog_in_0>(if (setq StartPt (getpoint "\nStart point of path: "))</PRE><PRE class=prog_in_0>    (if        (setq EndPt (getpoint StartPt "\nEndpoint of path: "))</PRE><PRE class=prog_in_0>      (if (setq HalfWidth (getdist EndPt "\nHalf width of path: "))</PRE><PRE class=prog_in_0>            ;; 按上面所述创建</PRE><PRE class=prog_in_0>            ;; 关联表,该关联表将成为函数</PRE><PRE class=prog_in_0>            ;; 的返回值。</PRE><PRE class=prog_in_0>            (list</PRE><PRE class=prog_in_0>            (cons 10 StartPt)</PRE><PRE class=prog_in_0>            (cons 11 EndPt)</PRE><PRE class=prog_in_0>            (cons 40 (* HalfWidth 2.0))</PRE><PRE class=prog_in_0>            (cons 50 (angle StartPt EndPt))</PRE><PRE class=prog_in_0>            (cons 41 (distance StartPt EndPt))</PRE><PRE class=prog_in_0>                  )</PRE><PRE class=prog_in_0>      )</PRE><PRE class=prog_in_0>    )</PRE><PRE class=prog_in_0>)</PRE><PRE class=prog_in_end_0>)</PRE>
<P class=body>请注意,在创建表时,程序将用户指定的半宽乘以 2,转换成所需的小路全宽。

meflying 发表于 2005-4-21 11:58:00

不好意思,看岔了

wyd 发表于 2005-4-21 16:51:00

谢谢大家,现在可以运行了
页: [1]
查看完整版本: 各位高手来帮忙指点错在哪了