乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 59|回复: 13

[编程交流] 如何通过编号重复

[复制链接]

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 19:55:50 | 显示全部楼层 |阅读模式
你好
 
我有3个列表(List1、List2和List3)填充了值
重复一次,我想从每个列表中获取第一个元素。
 
我试过这个:
  1. (setq cnt 1)
  2. (repeat 3
  3.    (progn
  4.       (nth 0 (strcat "List" (itoa cnt)))
  5.       "do something"
  6.    )
  7.    (setq cnt (1+cnt)
  8. )

 
但我犯了个错误
我做错了什么?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:03:13 | 显示全部楼层
除了你想要的结果之外,给我看看这三个列表的内容。
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:09:25 | 显示全部楼层
它们表示excel工作表中的距离值。还有空值单元格(nil)
我忘了提到(如果不等于零)部分
 
列表1(660.0 400.0 580.0 480.0 410.0零零零零零零零零)
列表2(530.0 540.0 nil nil nil nil nil nil)
列表3(nil nil nil nil nil nil nil nil nil nil nil);;;;;情况并非总是如此!
 
  1. (setq cnt 1)
  2. (repeat 3
  3.   (if (/= (nth (strcat "List" (itoa cnt)) nil)
  4.      (progn
  5.         (nth 0 (strcat "List" (itoa cnt)))
  6.         "do something"
  7.      )
  8.      (setq cnt (1+cnt)
  9.   )
  10. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:13:41 | 显示全部楼层
这一个与重复,因为你在寻找。
 
  1. (setq List1 '(660.0 400.0 580.0 480.0 410.0 nil nil nil nil nil)
  2.      List2 '(530.0 540.0 nil nil nil nil nil nil nil nil)
  3.      List3 '(nil nil nil nil nil nil nil nil nil nil)
  4.      )
  5. (setq cnt 0)
  6. (repeat 3
  7. (if (setq v (car (eval (read (strcat "List" (itoa (setq cnt (1+ cnt))))))))
  8.    (setq lst (cons v lst))
  9.      )
  10. )
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:14:50 | 显示全部楼层
很有魅力!thanx人。。。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:19:57 | 显示全部楼层
 
不客气
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:25:57 | 显示全部楼层
如果我理解了你想要实现的目标,这会有帮助吗?
  1. (setq List1 '(660.0 400.0 580.0 480.0 410.0 nil nil nil nil nil)
  2.      List2 '(530.0 540.0 nil nil nil nil nil nil nil nil)
  3.      List3 '(nil nil nil nil nil nil nil nil nil nil)
  4. )
  5. (mapcar 'list list1 list2 list3)
  6. => ((660.0 530.0 nil) (400.0 540.0 nil) (580.0 nil nil) (480.0 nil nil) (410.0 nil nil) (nil nil nil) (nil nil nil) (nil nil nil) (nil nil nil) (nil nil nil))
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 20:31:25 | 显示全部楼层
您也可以使用(第n个x列表)获取列表中的任何项目。显然,如果x大于项目数,则会出现错误。当您想要操作多个列表时,它非常方便。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:33:55 | 显示全部楼层
我知道你的问题是关于重复功能的,可能是因为你的列表目前是如何设置的。
 
如果您试图从数量不确定的源创建数据存储。我建议只使用一个变量和多个列表(正如Bigal建议的那样),并避免使用nil值作为元素。
 
所以不是这个
 
  1. (setq [b]List1[/b] '(660.0 400.0 580.0 480.0 410.0 nil nil nil nil nil)
  2.      [b]List2[/b] '(530.0 540.0 nil nil nil nil nil nil nil nil)
  3.      [b]List3[/b] '(nil nil nil nil nil nil nil nil nil nil)
  4.      )

 
  1. (setq [b]Lists[/b] '((660.0 400.0 580.0 480.0 410.0 0.0 0.0 0.0 0.0 0.0)
  2.              (530.0 540.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0)
  3.              (0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0)))

 
每个列表的元素数是已知的:Excel列/行,因此当您调用下面的sub_函数时,不会有跳过每个列表的元素数的危险。
 
  1. (defun _nth (n l) (mapcar '(lambda (x)(nth n x)) l))

 
假设您需要每个列表中的第4项
 
  1. (_nth 3 lists)
  2. (480.0 0.0 0.0)

 
每个列表的第一项
  1. (_nth 0 lists)
  2. (660.0 530.0 0.0)

 
  1. (defun c:demo  ( / Lists op order propertydata)
  2.      
  3. ;;   this is the section where you retreive the excel data from excel file        ;;
  4. ; And this is the result ;
  5.      (setq Lists '((660.0 400.0 580.0 480.0 410.0 0.0 0.0 0.0 0.0 0.0)
  6.              (530.0 540.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0)
  7.              (0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0)
  8.              ))
  9.      
  10.      (initget 1 "D W V")
  11.      (setq op (getkword "\nChoose properties [Distance/Width/Volume]: "))
  12.      (setq order (cadr (assoc op '(("D" 0)("W" 1)("V" 2)))))
  13.      (print (setq propertydata (_nth order Lists)))
  14.      
  15. ; example of getting the sum of the data property
  16.      
  17.      (print (apply '+ propertydata))
  18.      (princ)
  19.      )

 
  1. Command:  DEMO
  2. Choose properties [[b]Distance[/b]/Width/Volume]: [b]D[/b]
  3. (660.0 530.0 0.0)
  4. [b]1190.0[/b]

 
HTH公司
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:38:55 | 显示全部楼层
很抱歉我的回复太晚,但我的问题只通过Tharwats代码的一部分得到了解决。
我必须画10条线,每条线上最多画3个圆。
这些值在excel表格中:
 
col1=名称
col2=x
col3=y
col4=圆圈1(可以为空)
col5=圆圈2(可以为空)
col6=圆圈3(可以为空)
 
(我有更多的列,但这里没有提及)
 
因为我有10行,excel中有10行。
使用我在互联网上找到的代码,我导入Excelsheet的每一列并将其放入列表中。
 
我在重复中使用了col1(list0)的值的长度,并使用一个计数器来ENTMAKE行List1(col2)和List2(col3)。然而,圆(List3、List4和List5)的ENTMAKE需要在第二个repeat和一个计数器中,因为它们属于一行。
 
当我使用:(nth cnt1(strcat“List”(itoa cnt2))时,它给出了一个错误。
但是当我使用:(nth cnt1(eval(read(strcat“List”(itoa cnt2 а)а)]))时,它工作了
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 01:18 , Processed in 0.949278 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表