找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: 行雲

[求助] (rtos 变量 2 1)转字符号串,求教

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-2-8 22:23:23 | 显示全部楼层

你不看上面帖子吗, 你你这么写是错误的 (setq ck (strcat" (rtos kd 2 1) * (rtos cd 2 1) ")), 你改对了再讨论下面的吧。LISP的好处之一是可以把语句粘贴到命令去测试看结果,你多试试。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-2-8 23:03:38 | 显示全部楼层
" (rtos kd 2 1) * (rtos cd 2 1) "
喝酒了,不多说了,就说这一句代码,其实就是一个字符串,只是看上去像代码。
Lisp中的括号、引号、空格、反斜杠什么的,都有一定意义,需要细心体会。


再卖一次,有兴趣可以看一下我的签名中的“认识自定义函数”,不保证正确,但能帮助理解。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-8 23:07:02 | 显示全部楼层

多谢指正,此前那个ck变量,试了多种句式,改来改去,自己都把变量名搞混肴了,因为急着改程序,浏览帖子时一时没理解透,所有出现重复提问草率行为,对各位的回复有失尊重。另外,有些概念确实理解不来,例如,你刚才讲到的返回值,这都要看过书,从头起步的。多谢指正,多谢楼上各位
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-2-8 23:17:46 | 显示全部楼层

LISP是表处理语言,语法规则:

1、LISP的最简单的一层表是(func  var1 var2 ....)
2、左括号后面一定是函数,后面的跟着的都是参数(变量),这些参数也可能是另外一对括号的返回值,或者常量,变量名
2、一对括号的结果是一个值
3、一对括号的结果(求值)有个返回值
4、这个返回值一定是上层括号的变量
5、就这么一层一层的求值(从最里面的括号对),直到最外层的括号返回个值。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-8 23:34:12 | 显示全部楼层

在下比教浮躁,没老实去看过书,都是看别人代码,观摩对对,拼接自己想实现的功能。以前我个人将一对括号理解为一个单元,里括号结果,向次外一级外括号等待数值的变量传递信息,我都是这么理解的,很土,经你讲解,才算理解术语返回值的概念
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-8 23:55:04 | 显示全部楼层

你好。

这句代码(setq azhi (findfile "ADC.txt"))的  azhi  想从外部文件"ADC.txt"里面取得数值

"ADC.txt"里面有两个数值,目录分别为A1A2
不知道是不是这样写:
=>A1 20 A1<=
=>A2 30 A2<=
目录A1A2的数值分别为20 和 30

现在(setq azhi (findfile "ADC.txt"),,,,,)已指向了文件,请问,接下来省略号部分,,,,,用什么代码可访问到具体值 A1 A2
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-2-9 00:21:38 | 显示全部楼层

去开源函数库论坛,搜索 xd::list:fromfile 看看是如何从外部文件读入数据到表的。

论坛很多代码,包括开源函数库,多去看看前人写的代码,消化了,再自己写代码。站在别人的肩膀上,你就比别人还高。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-9 00:40:37 | 显示全部楼层
本帖最后由 行雲 于 2017-2-9 00:45 编辑

老大,你就垂手弄几组代码让小的爽一下先呗,好不,啃大部头书,好吃力的。

目前是这效果
QQ图片20170209003552.png
取值代码(setq gbhd (findfile "pdwlmbb.txt"))

如果(setq azhi (findfile "pdwlmbb.txt")在这里弄点代码,直接读取外部件里某特定数值)  就好了

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-2-9 01:05:02 | 显示全部楼层

函数库论坛已经有现成的代码了,为什么还要给你写呢,你就不能去看吗? 你主动性不够啊。

http://bbs.xdcad.net/thread-670803-1-1.html

你去把函数库论坛 xd::list 开头的,都看看,包含了几乎所有的表的操作了,现成的函数,要学会用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-9 15:54:10 | 显示全部楼层

老大请垂教,第四行的(read 和 第五行的(cons  分别是什么动作啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-2-9 16:15:45 | 显示全部楼层

把元素添加到已经有的表的前面,成为表的第一个元素

你自己在命令行分别输入

(setq abc (cons 1 abc)) 回车
(setq abc (cons 2 abc)) 回车
(setq abc (cons "1" abc)) 回车

自己看看ABC的值

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

使用道具 举报

 楼主| 发表于 2017-2-9 16:55:50 | 显示全部楼层
本帖最后由 行雲 于 2017-2-9 16:58 编辑

你好,我基础确实太差,你可否大致说说这分别代表什么意思么?

正在重生成模型。
AutoCAD 菜单实用程序已加载。
命令: (setq abc (cons 1 abc)) (1)
命令: (setq abc (cons 1 abc)) (1 1)
命令: (setq abc (cons 1 abc)) (1 1 1)
命令: (setq abc (cons 1 abc)) (1 1 1 1)
命令: (setq abc (cons 1 abc)) (1 1 1 1 1)
命令: (setq abc (cons 2 abc)) (2 1 1 1 1 1)
命令: (setq abc (cons 2 abc)) (2 2 1 1 1 1 1)
命令: (setq abc (cons 2 abc)) (2 2 2 1 1 1 1 1)
命令: (setq abc (cons "1" abc)) ("1" 2 2 2 1 1 1 1 1)
命令: (setq abc (cons "1" abc)) ("1" "1" 2 2 2 1 1 1 1 1)
命令: (setq abc (cons "1" abc)) ("1" "1" "1" 2 2 2 1 1 1 1 1)

其中
(cons 1 abc)是有回车动作的,粘贴了5次,每次均有回车
(cons 2 abc)是未经回车,粘贴完成,自己就弹上去了
(cons "1" abc)是经过回车才弹上去的

实在不明白这代表什么意思,类似编码器计数累进?在应用中又如何加於运用呢?

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-2-9 17:25:44 | 显示全部楼层

通过这么多行的例子,你还没看出规律吗?

是在构建表,表是LISP最重要,最灵活的数据类型,LISP就是表处理语言。

(setq lst (car (entsel)))
(setq ed (entget lst))


单行执行上面两行代码,选择一个实体,然后把实体的表数据内容赋值给变量ed, 你看屏幕ed的内容,就是一个表。
表可以有cons , append, car,cdr,nth等函数操作,去看LISP函数手册,自己在命令行用用这些函数加深理解。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-9 17:43:37 | 显示全部楼层
另请教各一个问题,关于getstring 和 getdist 的用法

代码
(defun c:aa ()
(setvar "cmdecho" 0)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq zmg 5)
(setq cda (getstring "\n长度A:"))
(setq cdb (getstring "\n长度B:"))
(setq cdc (getstring "\n长度C:"))

;(setq cda (getdist "\n长度A:"))
;(setq cdb (getdist "\n长度B:"))
;(setq cdc (getdist "\n长度C:"))

(setq p0 (getpoint))
(setq gt 1)
(if(/= cda "")
  (progn
  (command "text" "ml" (polar (polar p0 (* pi 1.5) (* gt (+ (* zmg 1) zmg))) (* pi 0) 30) zmg "0" cda)
  (command "line" (polar (polar p0 (* pi 1.5) (+ (* gt (+ (* zmg 1) zmg)) zmg)) (* 1 pi) 3)
                  (polar (polar p0 (* pi 1.5) (+ (* gt (+ (* zmg 1) zmg)) zmg)) (* 0 pi) 100) "")
  (setq gt (1+ gt))
  )
)
(if(/= cdb "")
  (progn
  (command "text" "ml" (polar (polar p0 (* pi 1.5) (* gt (+ (* zmg 1) zmg))) (* pi 0) 30) zmg "0" cdb)
  (command "line" (polar (polar p0 (* pi 1.5) (+ (* gt (+ (* zmg 1) zmg)) zmg)) (* 1 pi) 3)
                  (polar (polar p0 (* pi 1.5) (+ (* gt (+ (* zmg 1) zmg)) zmg)) (* 0 pi) 100) "")
  (setq gt (1+ gt))
  )
)
(if(/= cdc "")
  (progn
  (command "text" "ml" (polar (polar p0 (* pi 1.5) (* gt (+ (* zmg 1) zmg))) (* pi 0) 30) zmg "0" cdc)
  (command "line" (polar (polar p0 (* pi 1.5) (+ (* gt (+ (* zmg 1) zmg)) zmg)) (* 1 pi) 3)
                  (polar (polar p0 (* pi 1.5) (+ (* gt (+ (* zmg 1) zmg)) zmg)) (* 0 pi) 100) "")
  (setq gt (1+ gt))
  )
)
(setvar "osmode" os)
(princ)
)


执行效果
捕获.JPG

图中
左边getdist输入的。随意点两点,作为长度输入。只输入了一次,即(getdist"\n长度A:"),剩下两个以空格键跳过
右边getstring输入的。人工敲数字输入。也只输入了一次,即 (getstring "\n长度A:"),剩下两个以空格键跳过




区别在于两者画的横线
它是因应变量(if(/= cda "")  (if(/= cdb "")  (if(/= cdc "")有无赋值来动作的

图左边getdist,后面两个变量 (if(/= cdb "")  (if(/= cdc "")并未赋值,只是以空格键跳过,程序把横线画出来了
图右边getstring,,后面两个变量 (if(/= cdb "")  (if(/= cdc "")未赋值,以空格键跳过,画横线未动作

请问,如何用getdist实现图中右边那效果?即要求输入(getdist "\n长度B:")时,敲空格键,(if(/= cdb "")  当 cdb 未赋值




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

使用道具 举报

 楼主| 发表于 2017-2-9 17:45:59 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 06:27 , Processed in 0.423044 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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