乐筑天下

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

[编程交流] 完成和评估

[复制链接]

56

主题

284

帖子

231

银币

后起之秀

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

铜币
289
发表于 2022-7-6 06:54:05 | 显示全部楼层 |阅读模式
你好
 
也可以写入以下表达式:
 
  1. (foreach el (list 'Length 'Circumference 'ArcLength)
  2. (if (vlax-property-available-p vobi el) (setq per (vlax-get-property vobi el) )) )

 
停止对第一个真实答案列表的评估?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:58:52 | 显示全部楼层
我不太明白这个问题,但也许:
  1. (vl-some
  2.   '(lambda ( x ) (if (vlax-property-available-p vobi x) (vlax-get-property vobi x)))
  3.   '(length circumference arclength)
  4. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:03:49 | 显示全部楼层
Lee,我相信这正是Costinbos77所要寻找的——一种End Foreach语句(例如类似于VB中的End for),它将在第一次遇到满足特定条件的项时中止评估周期。
 
我提议这样做是为了证明两者的区别:
  1. (progn (foreach x '(1 2 5 3 5 4 5) (if (eq x 5) (print T) (print nil))) (princ))
vs。
  1. (progn (vl-some '(lambda(x) (if (eq x 5) (print T) (print nil))) '(1 2 5 3 5 4 5)) (princ))
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

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

铜币
289
发表于 2022-7-6 07:12:27 | 显示全部楼层
谢谢你的回复。
 
我重新制定了要求。
 
vl某些函数将停止计算第一个真实响应?
 
因为foreach函数计算整个项目列表。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:14:46 | 显示全部楼层
 
正确-请参阅上面MSasu提供的演示。
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

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

铜币
289
发表于 2022-7-6 07:19:32 | 显示全部楼层
我试着表达:
  1. (progn (vl-some '(lambda(x) (princ "\n  ") (princ (if (= x 5) (setq a x) "NO")) (princ "  ;")) '(1 2 5 3 5 4 5)) (princ))

 
结果是:
 
  1. NO  ; ' Only one! Supposed to be two.'
  2. ...
  3. and
  4. a = nil

 
似乎评估在第一个错误时停止。我需要反转,首先是真的。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:24:09 | 显示全部楼层
我相信这就是你想要得到的:
  1. (vl-some '(lambda(x) (princ "\n") (princ (if (= x 5) (progn (setq a x) "Done")))) '(1 2 5 3 5 4 5))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:30:33 | 显示全部楼层
考虑这个例子:
  1. _$ (vl-some '(lambda ( x ) (print x) (= x 5)) '(0 1 2 5 3 4 5))
  2. 0
  3. 1
  4. 2
  5. 5 T
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

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

铜币
289
发表于 2022-7-6 07:35:07 | 显示全部楼层
似乎:
 
  1. (vl-some '(lambda(x) (princ "\n  ") (princ (if (= x 5) (setq a x) [color=red]vvv[/color])) (princ "  ;")) '(1 2 5 3 5 4 5))

 
如果vvv/=nil,停止评估lambda函数。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:39:32 | 显示全部楼层
您的代码将在第一项停止求值,因为由于最后一次求值(PRINC),LAMBDA函数将始终返回T!你测试了7号帖子上提出的更正吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 11:41 , Processed in 0.550952 second(s), 72 queries .

© 2020-2025 乐筑天下

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