明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: SWAYWOOD

求助,关于变量赋值的问题

  [复制链接]
 楼主| 发表于 2004-5-13 20:09:00 | 显示全部楼层
我的程序还很乱,贴上来只怕耽误你的时间,不如你把你的测试程序贴上来看看,或许对我有启发,谢谢……
发表于 2004-5-13 23:21:00 | 显示全部楼层
好像不是很复杂的程序嘛,应该不会用很多时间来看的
发表于 2004-5-16 01:37:00 | 显示全部楼层
转贴一个别的网站的题目: (setq p1 1 p2 2 p3 3 p4 4 p5 5) ;让pn (n= 1~5)的值增加0.5 要求程序具有通用性,即n不定,可以为任意整数。 通用的表述是: 已经知道 pn(n>=0)的值,要求对pn的值分别加上一个数值b(b为任意实数)
 楼主| 发表于 2004-5-16 09:46:00 | 显示全部楼层
比较难啊
发表于 2004-5-16 09:49:00 | 显示全部楼层
如果p1 p2 ... pn组成列表,mapcar搞定 否则: (defun c:test( / i sym p1 p2 p3 p4 p5)
(setq p1 1 p2 2 p3 3 p4 4 p5 5)
(setq i 1)
(while (eval (setq sym (read (strcat "p" (itoa i)))))
(set sym (+ (eval sym) 0.5))
(setq i (1+ i))
)
(list p1 p2 p3 p4 p5)
)
 楼主| 发表于 2004-5-16 10:09:00 | 显示全部楼层
我也发现mapcar可以搞定,不过下面的不知道,又学了一招,谢谢
 楼主| 发表于 2004-5-16 10:56:00 | 显示全部楼层
(setq p10 999 p18 3 ) (defun pnadd(n b)
(setq list1 (list (read (strcat "p" (itoa n)))))
(car (mapcar 'set list1 (mapcar '(lambda (x) (+ x b)) (mapcar 'eval list1))))
) _$ (setq p10 999 p18 3 )
3
_$ (pnadd 10 2)
1001
_$ (pnadd 18 6)
9
_$
发表于 2004-5-16 11:07:00 | 显示全部楼层
楼上的, 似乎做复杂了吧,,,是那种把简单的事情可以变复杂了来做 这样就可以了: (defun pnadd(n b)
(+ (eval (read (strcat "p" (itoa n)))) b)
)
 楼主| 发表于 2004-5-16 20:06:00 | 显示全部楼层
你的程序,运行结果: _$ (setq p10 9)
9
_$ (pnadd 10 1.5)
10.5
_$ p10
9
_$ 我的有一点不同,既运算,同时也改变变量值, _$ (setq p10 9)
9
_$ (pnadd 10 1.5)
10.5
_$ p10
10.5
_$
发表于 2004-5-17 08:55:00 | 显示全部楼层
既然是函数, 就尽量不要去改变主函数的变量,这样程序的可读性就降低了很多,


你可以使用其返回值,如:


(setq p10 (pnadd 10 1.5));
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 05:39 , Processed in 0.148254 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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