找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1009|回复: 13

[求助] [求助]:请教一个看似简单的问题

[复制链接]
发表于 2003-5-22 09:40:30 | 显示全部楼层 |阅读模式

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

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

×
比如有这样一些数据:21-213-9,22-9-2,110-45-22等,如何才能方便的将这些数据中的最大值分别找出来?如213,22,110。(pkpm数据处理)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2003-5-22 10:17:08 | 显示全部楼层
我写了一个,用了XDRX_API

  1. <normalfont>
  2. (defun GetMaxVal (str)
  3.   (itoa (apply
  4.           'max
  5.           (mapcar
  6.             '(lambda (x)
  7.                (atoi x)
  8.              )
  9.             (xdrx_string_tok str "-")
  10.           )
  11.         )
  12.   )
  13. )
  14. </normalfont>


测试:
命令: (getmaxval "21-213-9")
"213"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-22 10:54:15 | 显示全部楼层
NEWER GG 就是牛哦,呵呵,有个问题要问NEWER,怎么求序列中的数字的和呀
比如(1 2 5 40 60 38)把序列中的所有数相加:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-22 11:22:37 | 显示全部楼层
(+ 1 2 5 40 60 38)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-22 12:01:22 | 显示全部楼层
:),不是这样的了,序列是不确定的,我只是举个例子而已哦,怎么把序列的每一个数都提取出来相加呀,看似简单的问题,其实。。。嘻嘻
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2003-5-22 12:17:22 | 显示全部楼层
最初由 jianqiang21c 发布
[B]:),不是这样的了,序列是不确定的,我只是举个例子而已哦,怎么把序列的每一个数都提取出来相加呀,看似简单的问题,其实。。。嘻嘻 [/B]


这个问题如果你是初学LISP,你应该考虑用循环做:

  1. (setq a '(1 4 2 67 4))
  2. (setq sum 0)
  3. (foreach n a
  4.     (setq sum (+ sum n))
  5. )


或者:


  1. (setq a '(1 4 2 67 4))
  2. (setq sum 0 i 0)
  3. (repeat (length a)
  4.     (setq sum (+ sum (nth i a))
  5.              i (1+ i)
  6.    )
  7. )


再或者:

  1. (setq a '(1 4 2 67 4))
  2. (setq sum 0)
  3. (while (car a)
  4.     (setq sum (+ sum (car a))
  5.              a (cdr a)
  6.    )
  7. )


上面演示了不同的循环控制方法.

但是如果你要是一直用上面的方法,说明你LISP仅仅是入门. 下面告诉你最方便的方法,也是LISP语言的魅力的地方,强大的表处理方法.


假如你的数字序列在一个表中
(setq a '(1 4 2 67 4))
(setq b (apply '+ a))  后,b就是所有的数字和了.

看你还算乖,多告诉你点, lisp就是对表进行求值,把表的第一个元素当成运算符或者函数, 表的cdr 是参数表.

所以你有了表的序列,希望运算,就是希望在表头插入运算符,LISP就求值了, 而apply 函数的作用就是把运算符或者函数名放入表头,并且求值.

所以,比如如果你希望得到所有数的乘积,那么你:

(apply '* a)

如果求表中最大的数,那么:

(apply 'max a)

不知道你理解了吗?

如果理解,我给你出个问题,你写代码贴论坛吧.

问题1: 还是上面你的数字表,现在让你把他们都变成字符串表
得到: '("1" "4" "2" "67" "4")

这个可不是上面的APPLY的应用,你自己想想,用什么方法最好?

问题2: 得到上面的字符表后, 要求把他们都连接起来,变成数字142674, 注意是数字,不是字符串. 你看看怎么做?

别让我失望哦:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-22 17:00:45 | 显示全部楼层
:),谢谢牛 GG指点,还给我出了两道联系题哦,下午有两节课刚看见,呵呵
我的方法:
  1. <normalfont>
  2. (setq a '(1 4 2 67 4) b nil)
  3. (mapcar
  4.   '(lambda (x)
  5.      (setq x (itoa x))
  6. (setq b (cons x b))
  7.      )
  8. a
  9.   )
  10. (setq b (reverse b))
  11. (setq c (atoi (apply 'strcat b)))
  12. </normalfont>

不知道有没有让牛GG失望哦,嘻嘻
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2003-5-22 20:22:57 | 显示全部楼层
最初由 jianqiang21c 发布
[B]:),谢谢牛 GG指点,还给我出了两道联系题哦,下午有两节课刚看见,呵呵
我的方法:
[/B]


可以给及格了,但是,虽然得到了(1 4 2 67 4) ---> ("1" "4" "2"  "67" "4"), 但是中间过程麻烦了,不用构建那个b表啊, macar 处理的是表的每一个元素,最后的结果还是这些处理后元素的表. 你额外处理的b表,浪费了很多时间,如果数据量大,就不能忽略了.所以:

  1. <normalfont>
  2. (setq a '(1 4 2 67 4))
  3. (mapcar
  4.   '(lambda (x)
  5.      (itoa x)
  6.   ) a
  7. )
  8. </normalfont>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-22 20:29:03 | 显示全部楼层
哦,明白了,嘻嘻,及格万岁
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-24 01:28:12 | 显示全部楼层

谢谢newer

不知道为什么前两天我总回复不了,谢谢也没说成。
在你的提示下,我用lisp自己的函数解决了那个问题,不是不用晓东的函数,主要是有的电脑用不了他的程序。
如果你需要,我可以贴上来
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-24 20:25:55 | 显示全部楼层
请问如何将 H-500X300X8X12 转换成 “H-500X300X8X12”?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-25 00:04:34 | 显示全部楼层

Re: 谢谢newer

最初由 ybyuan 发布
[B]不知道为什么前两天我总回复不了,谢谢也没说成。
在你的提示下,我用lisp自己的函数解决了那个问题,不是不用晓东的函数,主要是有的电脑用不了他的程序。
如果你需要,我可以贴上来 [/B]


:)....,告诉xd,什么函数不能用,他会改进.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-25 00:09:41 | 显示全部楼层
最初由 闲云 发布
[B]请问如何将 H-500X300X8X12 转换成 “H-500X300X8X12”? [/B]


H-500X300X8X12 在lisp里面被理解为变量,
(不明白你干嘛这样定义).
vl有将变量名转为字符串的函数,cbx老师也
写过一个函数,大意是先princ到一个临时文件,
再读出来.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-5-25 00:13:50 | 显示全部楼层
最初由 闲云 发布
[B]请问如何将 H-500X300X8X12 转换成 “H-500X300X8X12”? [/B]


vl-ptin1-to-string

返回 LISP 数据的字符串表示,就象它是由 prin1 函数输出的一样
(vl-prin1-to-string  data)

参数

data

任意 AutoLISP 数据。

返回值

字符串,其中包含 data 的打印表示,就好像它是由 prin1 显示的一样。

样例

_$ (vl-prin1-to-string "abc")

"\"abc\""

_$ (vl-prin1-to-string "c:\\acadwin")

"\"C:\\\\ACADWIN\""

_$ (vl-prin1-to-string 'my-var)

"MY-VAR"

请参见 vl-princ-to-string 函数。


vl-ptinc-to-string

返回 LISP 数据的字符串表示,就象它是由 princ 函数输出的一样
(vl-princ-to-string  data)

参数

data

任意 AutoLISP 数据。

返回值

字符串,其中包含 data 的打印表示,就好像它是由 princ 显示的一样。

样例

_$ (vl-princ-to-string "abc")

"abc"

_$ (vl-princ-to-string "c:\\acadwin")

"C:\\ACADWIN"

_$ (vl-princ-to-string 'my-var)

"MY-VAR"

请参见 vl-prin1-to-string 函数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 09:49 , Processed in 0.322938 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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