明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2224|回复: 6

请教:eval的这种情况。

[复制链接]
发表于 2004-10-20 21:32:00 | 显示全部楼层 |阅读模式
请教:eval的这种情况为什么会在编译时有警告信息。 ;--------------------------------------------------------------------------------
; ◇连续水平对称函数◇
;--------------------------------------------------------------------------------
;p-点变量的符号字符串,i-点变量的下标,n-点变量的数目,a0-对称轴上的一点
(defun lhd (p i n a0 / xx yy)
(repeat n
(setq xx (read (strcat p "h" (itoa i)));将phi赋给xx
yy (read (strcat p (itoa i))));将pi赋给yy
;将pi的镜像点的值赋给xx的值-phi
(set xx (list (car (eval yy)) (- (* (cadr a0) 2) (cadr (eval yy)))))
(setq i (1+ i))
)
)
发表于 2004-10-20 22:47:00 | 显示全部楼层
本帖最后由 作者 于 2004-10-21 15:35:57 编辑

heart1982发表于2004-10-20 21:32:00回复:(heart1982)请教:eval的这种情况。请教:eval的这种情况为什么会在编译时有警告信息。 ;--------------------------------------------------------------------------------;
yy (read (strcat p (itoa i))));将pi赋给yy 只是 read ,并未赋值

发表于 2004-10-20 23:44:00 | 显示全部楼层
(set         xx (list (car (eval yy)) (- (* (cadr a0) 2) (cadr (eval yy)))))





(setq         xx (list (car (eval yy)) (- (* (cadr a0) 2) (cadr (eval yy)))))
 楼主| 发表于 2004-10-21 22:10:00 | 显示全部楼层
这个程序能正常运行,我在编程时经常调用这个子程序,没有出现异常。就是在编译成vlx文件时出现警告。 再者set改为setq照样出现此毛病,而且程序不能正常运行。这各程序正体现了set和setq的区别 我决的特别关键的是它在eval上出项毛病;以下是编译时出现的错误 ; (COMPILE-FILES st (F:/tmp.lsp))
[分析文件 "F:/tmp.lsp"]
.
; 警告: 运行时计算的表达式: YY
; 警告: 运行时计算的表达式: YY
[COMPILING F:/tmp.lsp]
;;LHD
[FASDUMPING 对象格式 -> "F:/tmp.fas"]
; 编译完成。
发表于 2004-10-21 23:59:00 | 显示全部楼层
heart1982发表于2004-10-21 22:10:00这个程序能正常运行,我在编程时经常调用这个子程序,没有出现异常。就是在编译成vlx文件时出现警告。 再者set改为setq照样出现此毛病,而且程序不能正常运行...
试试这样:
;--------------------------------------------------------------------------------
; ◇连续水平对称函数◇
;--------------------------------------------------------------------------------
;p-点变量的符号字符串,i-点变量的下标,n-点变量的数目,a0-对称轴上的一点
(defun lhd (p i n a0 / xx yy)
(repeat n
(set xx (read (strcat p "h" (itoa i))));将phi赋给xx
(set yy (read (strcat p (itoa i))));将pi赋给yy
;将pi的镜像点的值赋给xx的值-phi
(set zz (list (car (eval yy)) (- (* (cadr a0) 2) (cadr (eval yy)))));;这里可以用setq。(怎么没有用上xx,却又对xx第二次赋值?前一次没有用啦?!)
(setq i (1+ i))
)
) 因为:(setq xx (read (strcat p "h" (itoa i))) yy 。。。);将phi赋给xx将pi赋给yy 其实都没有赋值,当i=1,你只不过是把 ‘ph1 付给xx ,'p1 付给yy,两个都是符号,sym,且不传递ph1,p1本身的值!!!
发表于 2004-10-22 07:53:00 | 显示全部楼层
heart1982发表于2004-10-20 21:32:00回复:(heart1982)请教:eval的这种情况。请教:eval的这种情况为什么会在编译时有警告信息。 ;--------------------------------------------------------------------------------;
这是正常现象,编译器只是提醒你eval是要"现处理程序",程序执行时间比较"花时间"而已!
 楼主| 发表于 2004-10-22 19:23:00 | 显示全部楼层
哦,明白了。谢谢!


不过我还要提醒一下其他的人,这程序正体现了set和setq的区别。好好斟琢是有用的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-30 10:22 , Processed in 0.187643 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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