明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2992|回复: 14

[源码] 绘制一个方程曲线,老是提醒语法错误,找不到

[复制链接]
发表于 2014-6-23 14:44:44 | 显示全部楼层 |阅读模式
这是源码,我找不到语法错误在哪?麻烦大家帮忙看看。


(defun c:asph1()

(setq r (getreal "R 值:<1>"))
  (if (= r nil)
    (setq r 1)
  )  
(setq he (getreal "半径 :<1>"))
  (if (= he nil)
    (setq he 1)
  )  
(setq n (getint "等分数:<50>"))
  (if (= n nil)
    (setq n 50)
  )
(setq k (getreal "K 值 :<1>"))
  (if (= k nil)
    (setq k 1)
  )  
(setq A (getreal "A :<0>"))
  (if (= A nil)
    (setq A 0)
  )  
(setq B (getreal "B :<0>"))
  (if (= B nil)
    (setq B 0)
  )  
(setq C (getreal "C :<0>"))
  (if (= C nil)
    (setq C 0)
  )  
(setq D (getreal "D :<0>"))
  (if (= D nil)
    (setq D 0)
  )  
(setq E (getreal "E :<0>"))
  (if (= E nil)
    (setq E 0)
  )  
(setq F (getreal "F :<0>"))
  (if (= F nil)
    (setq F 0)
  )
(setq G (getreal "G :<0>"))
  (if (= G nil)
    (setq G 0)
  )
(setq H (getreal "H :<0>"))
  (if (= H nil)
    (setq H 0)
  )
(setq pt_base '(0 0))

  (setq he1 (/ he n))

(while (<= he1 he)
         (setq z (+ (/ (* r he1 he1) (1+ (sqrt (1- (* (1+ k) (expt r 2) (expt he1 2))))))
                 (* A (expt he1 2))
                 (* B (expt he1 4))
                 (* C (expt he1 6))
                 (* D (expt he1 8))
                 (* E (expt he1 10))
                 (* F (expt he1 12))
                 (* G (expt he1 14))
                 (* H (expt he1 16))
                 )
               (setq p (list he1 z))
        (command "line" pt_base p)
               (setq pt_base p)
                (setq he1 (+ he1 (/ he n)))
       
                 )

  )
  )



该贴已经同步到 meisy_leo的微博
发表于 2014-6-23 15:28:31 来自手机 | 显示全部楼层
用除的时候,注意实数与整数,俩整数得整数,1除50得0
sqrt后面不能是负数得加ABS
其他基本语法错误用语法检查可以找出来。
发表于 2014-6-23 16:32:52 | 显示全部楼层
提问的时候,应该把错误信息发上来,我发现你这程序最后面多了一个右括号。
 楼主| 发表于 2014-6-25 09:37:28 | 显示全部楼层
edata 发表于 2014-6-23 15:28
用除的时候,注意实数与整数,俩整数得整数,1除50得0
sqrt后面不能是负数得加ABS
其他基本语法错误用语法检 ...

谢谢您。我用的是AutoCAD里的visual lisp编辑器,没找到语法检查在哪?不知道我该怎么去检查?谢谢
 楼主| 发表于 2014-6-25 09:39:28 | 显示全部楼层
nzl1116 发表于 2014-6-23 16:32
提问的时候,应该把错误信息发上来,我发现你这程序最后面多了一个右括号。

谢谢您,我又检查了一遍,没发现括号多,错误信息附下,麻烦你有空再帮我看下。
 楼主| 发表于 2014-6-25 09:41:46 | 显示全部楼层
源程序部分更改后:
(defun c:asph1()

(setq r (getreal "R 值:<1>"))
  (if (= r nil)
    (setq r 1)
  )  
(setq he (getreal "半径 :<1.0>"))
  (if (= he nil)
    (setq he 1.0)
  )  

(setq n (getint "等分数:<50>"))
  (if (= n nil)
    (setq n 50)
  )
(setq k (getreal "K 值 :<1>"))
  (if (= k nil)
    (setq k 1)
  )  
(setq A (getreal "A :<0>"))
  (if (= A nil)
    (setq A 0)
  )  
(setq B (getreal "B :<0>"))
  (if (= B nil)
    (setq B 0)
  )  
(setq C (getreal "C :<0>"))
  (if (= C nil)
    (setq C 0)
  )  
(setq D (getreal "D :<0>"))
  (if (= D nil)
    (setq D 0)
  )  
(setq E (getreal "E :<0>"))
  (if (= E nil)
    (setq E 0)
  )  
(setq F (getreal "F :<0>"))
  (if (= F nil)
    (setq F 0)
  )
(setq G (getreal "G :<0>"))
  (if (= G nil)
    (setq G 0)
  )
(setq H (getreal "H :<0>"))
  (if (= H nil)
    (setq H 0)
  )
(setq pt_base '(0 0))

  (setq he1 (/ he n))

(while (<= he1 he)
         (setq z (+ (/ (* r he1 he1) (1+ (sqrt abs((1- (* (1+ k) (expt r 2) (expt he1 2)))))))
                 (* A (expt he1 2))
                 (* B (expt he1 4))
                 (* C (expt he1 6))
                 (* D (expt he1 8))
                 (* E (expt he1 10))
                 (* F (expt he1 12))
                 (* G (expt he1 14))
                 (* H (expt he1 16))
                 )
               (setq p (list he1 z))
               (command "line" pt_base p)
               (setq pt_base p)
                (setq he1 (+ he1 (/ he n)))
       
                 )

  )
  )


错误信息:
LOG 错误跟踪
...............
<1> :ERROR-BREAK
[2] (C:ASPH1 nil)
<3> :CALLBACK-ENTRY
<4> :ARQ-SUBR-CALLBACK
...............
发表于 2014-6-25 09:50:21 | 显示全部楼层
起码setq z的括号少了一个,结尾多了一个。
你用vlisp的编辑器检查就知道了。
发表于 2014-6-25 10:26:02 | 显示全部楼层

对应工具菜单的123456  第三个检查编辑器语法有对勾的,很好认。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-6-25 10:28:16 | 显示全部楼层
本帖最后由 edata 于 2014-6-25 14:34 编辑

建议getreal=nil 都改成实数
  1. (defun c:asph1(/ A B C D E F G H HE HE1 K N P PT_BASE R Z)

  2. (setq r (getreal "R 值:<1>"))
  3.   (if (= r nil)
  4.     (setq r 1.0)
  5.   )  
  6. (setq he (getreal "半径 :<1.0>"))
  7.   (if (= he nil)
  8.     (setq he 1.0)
  9.   )  
  10. (setq n (getint "等分数:<50>"))
  11.   (if (= n nil)
  12.     (setq n 50.0)
  13.   )
  14. (setq k (getreal "K 值 :<1>"))
  15.   (if (= k nil)
  16.     (setq k 1.0)
  17.   )  
  18. (setq A (getreal "A :<0>"))
  19.   (if (= A nil)
  20.     (setq A 0.0)
  21.   )  
  22. (setq B (getreal "B :<0>"))
  23.   (if (= B nil)
  24.     (setq B 0.0)
  25.   )  
  26. (setq C (getreal "C :<0>"))
  27.   (if (= C nil)
  28.     (setq C 0.0)
  29.   )  
  30. (setq D (getreal "D :<0>"))
  31.   (if (= D nil)
  32.     (setq D 0.0)
  33.   )  
  34. (setq E (getreal "E :<0>"))
  35.   (if (= E nil)
  36.     (setq E 0.0)
  37.   )  
  38. (setq F (getreal "F :<0>"))
  39.   (if (= F nil)
  40.     (setq F 0.0)
  41.   )
  42. (setq G (getreal "G :<0>"))
  43.   (if (= G nil)
  44.     (setq G 0.0)
  45.   )
  46. (setq H (getreal "H :<0>"))
  47.   (if (= H nil)
  48.     (setq H 0.0)
  49.   )
  50. (setq pt_base '(0 0))

  51.   (setq he1 (/ he n))

  52. (while (<= he1 he)
  53.          (setq z (+ (/ (* r he1 he1) (1+ (sqrt (abs(1- (* (1+ k) (expt r 2) (expt he1 2)))))))
  54.                  (* A (expt he1 2))
  55.                  (* B (expt he1 4))
  56.                  (* C (expt he1 6))
  57.                  (* D (expt he1 8))
  58.                  (* E (expt he1 10))
  59.                  (* F (expt he1 12))
  60.                  (* G (expt he1 14))
  61.                  (* H (expt he1 16))
  62.                  ))
  63.                (setq p (list he1 z))
  64.                (command "line" "non" pt_base "non" p "")
  65.                (setq pt_base p)
  66.                 (setq he1 (+ he1 (/ he n)))
  67.         
  68.                  )

  69.   )
 楼主| 发表于 2014-6-25 13:05:07 | 显示全部楼层
edata 发表于 2014-6-25 10:28
建议getreal=nil 都改成实数

非常感谢您。可是我运行了一下会出错。绘图界面什么也没有出现。麻烦您再帮我看一下
跟踪错误信息是:
LOG 错误跟踪
...............
<1> :ERROR-BREAK
[2] (C:ASPH1)
[3] (#<USUBR @2e110dc0 -top->)
<4> :用户输入 (c:asph1)
<5> :CALLBACK-ENTRY
[6] (C:VLIDE)
<7> :CALLBACK-ENTRY
<8> :ARQ-SUBR-CALLBACK
...............

我的方程式是:z=ry^2/(1+(1-(1+k)r^2 y^2)^0.5)+Ay^2+By^4+......+Hy^16
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-24 13:06 , Processed in 0.192749 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表