找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1340|回复: 4

[求助] [求助]:有关于列表(函数)问题请教

[复制链接]

已领礼包: 8847个

财富等级: 富甲天下

发表于 2008-8-14 17:28:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
麻烦高手检视下面程序有何问题
希望执行结果
(Q_1 h_lst "AA")---->回应 102
(Q_1 h_lst "BB")---->回应 200
(Q_1 h_lst "CC")---->回应 350
(Q_1 h_lst "DD")---->回应 500
(Q_1 h_lst "EE")---->回应 0   列表中"EE"不存在时回应 0


程序如下:
;;;(SETQ h_lst '((1.0 "AA" 102)(1.0 "BB" 200)(1.0 "CC" 350)(1.0 "DD" 550)))   
;;;(Q_1 h_lst "AA")                                                            
;;;回应 102                                                                    
;;;(Q_1 h_lst "EE")                                                            
;;;回应 102                                                                    
(defun Q_1 (LST WORD_T)                                                        
      (FOREACH x LST                                                           
             (if (= (NTH 1 x) WORD_T)                                          
                 (setq XX (NTH 2 x))                                          
                 ;(setq XX 0)             ;;假如我加了这一列,为何所有回应都为 0                                       
             )                                                                 
      )                                                                        
      XX                                                                       
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2008-8-15 12:44:16 | 显示全部楼层
foreach 是历遍全表,所以xx 回應的每次foeach的最后一次值

;;;(SETQ h_lst '((1.0 "AA" 102)(1.0 "BB" 200)(1.0 "CC" 350)(1.0 "DD" 550)))
;;;(Q_1 h_lst "AA")
;;;回应 102
;;;(Q_1 h_lst "EE")
;;;回应 102
(defun Q_1 (LST WORD_T)
  (setq ct 0)
  (while (< ct (length LST))
    (setq x (nth ct LST))
    (if        (= (NTH 1 x) WORD_T)
      (setq XX (NTH 2 x)
            ct (1+ (length LST)) ;;在這里就跳出,foreach做不到
      )
      (setq XX 0
            ;;假如我加了这一列,为何所有回应都为 0
            ct (1+ ct)
      )
    )
  )
  XX
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8847个

财富等级: 富甲天下

 楼主| 发表于 2008-8-15 14:27:01 | 显示全部楼层
感谢楼主点醒梦中人
,不然我还在(WHILE...)中转阿转
头都晕了
,程序运行O.K.
,谢谢楼主.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-8-15 23:27:33 | 显示全部楼层
  1. (defun xx (LST WORD_T)
  2.   (vl-load-com)
  3.   (IF (SETQ I (vl-position WORD_T  (mapcar 'cadr lst)))
  4.     (last (nth I lst))
  5.     0)
  6. )
  7. ;|
  8. (SETQ h_lst '((1.0 "AA" 102)(1.0 "BB" 200)(1.0 "CC" 350)(1.0 "DD" 550)))
  9. (xx h_lst "AA")---->回应 102
  10. (xx h_lst "BB")---->回应 200
  11. (xx h_lst "CC")---->回应 350
  12. (xx h_lst "DD")---->回应 500
  13. (xx h_lst "EE")---->回应 0
  14. |;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8847个

财富等级: 富甲天下

 楼主| 发表于 2008-8-16 08:50:56 | 显示全部楼层
呵呵!
感谢楼主回覆
很高兴看到不一样的写法.
程序很O.K.很好喔!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-20 19:25 , Processed in 0.192240 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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