乐筑天下

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

[编程交流] 等式,=,等于但不等于case sens

[复制链接]

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-5 23:11:55 | 显示全部楼层 |阅读模式
嘿伙计们,
 
我有一个例行程序,比较和更新标题栏中的修订值,并发现需要考虑一些值是否相等。。。但忽略了人物的情况。
 
例如,我希望例程将“A”和“A”视为相等。
 
我在堆栈溢出处发现了此线程:http://stackoverflow.com/questions/547436/whats-the-difference-between-eq-eql-equal-and-equalp-in-common-lisp
 
... 这表明使用了“equalp”。但“equalp”似乎不是AutoLISP函数。
 
AutoCAD中是否有“equalp”的替代品?
 
非常感谢您的帮助。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 23:27:32 | 显示全部楼层
您可以在比较时将字符串强制为大写。
 
  1. (setq s1 "lamensterms"  s2 "Lamensterms") (eq (strcase s1)(strcase s2))

 
这足以满足你的需要吗?
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-5 23:29:58 | 显示全部楼层
你好,pBe,
 
非常感谢您的回复。我不确定你提供的代码是否可以应用到例程中(至少,可能不是我目前构建代码的方式)。
 
我当前的(部分)代码是:
 
  1. ((= crev "A")
  2.   (SETQ nrev "B"))
  3. ((= crev "B")
  4.   (SETQ nrev "C"))
  5. ((= crev "C")
  6.   (SETQ nrev "D"))

 
其中,“crev”是当前版本,从版本块内的属性中提取,“nrev”是要设置的新版本。
 
任何小写修订字母都是打字错误,我真的不需要更正现有修订的大小写。。。但我希望例程能够在任何情况下读取值——如果这有意义的话。
 
所以如果crev=A,nrev=B,如果crev=A,nrev=B,依此类推。。
 
我可以简单地将以下几行添加到我的例程中:
 
  1. ((= crev "a")
  2.   (SETQ nrev "B"))
  3. ((= crev "b")
  4.   (SETQ nrev "C"))
  5. ((= crev "c")
  6.   (SETQ nrev "D"))

 
但我只是好奇是否有另一种方法,用一个不那么严格的“=”函数。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 23:44:51 | 显示全部楼层
我懂了,
 
  1. (if (setq a (assoc (strcase crev) '(("A" "B") ("B" "C") ("C" "D")("D" "E"))))
  2. (setq nrev (cadr a))
  3. )

 
现在,如果列表中没有定义值或CREV呢?例如“E”,就像你说的,拼写错误像“A”
 
甚至更好
 
  1. (chr (1+ (Ascii (strcase crev ))))
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 23:50:40 | 显示全部楼层
至于字符串比较:这里有一个快速而肮脏的代码[为了好玩]
 
  1. (defun _equalstr (s1 s2)
  2. (wcmatch s1
  3.    (apply 'strcat
  4.           (mapcar '(lambda (x)
  5.                      (if (<= 65 x 90)
  6.                        (strcat "[" (chr x) (chr (+ 32 x)) "]")
  7.                        (chr x)
  8.                      )
  9.                    )
  10.                   (vl-string->list (strcase s2))
  11.           )
  12.    )
  13. )
  14. )

 
(_equalstr“CADTutor here”“CADTutor here”)
(_equalstr“敏捷的棕色狐狸跳过懒狗”,“敏捷的棕色狐狸跳过懒狗”)
 
当然,只要使用strcase函数,它的加载就更容易了
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 00:02:24 | 显示全部楼层
Lamenterms,为了确保您的代码摘录在任何情况下都有效,您还可以确保crev变量在进行比较之前是大写的:
  1. [color=magenta](setq crev (strcat crev))[/color]
  2. [color=black]...[/color]
  3. ((= crev "A")
  4.   (SETQ nrev "B"))
  5. ((= crev "B")
  6.   (SETQ nrev "C"))
  7. ((= crev "C")
  8.   (SETQ nrev "D"))
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-6 00:03:30 | 显示全部楼层
啊,太棒了,谢谢你的指点。我非常喜欢使用“chr”和“ascii”函数的想法。
 
我确实打算发布整个代码,以获得一般反馈和更正。我想,一旦我从你们那里得到了一些意见,我会做出很多调整——哈哈。
 
同时,我将发布更多的问题来帮助我进一步开发代码(尽管我认为最好是开始新的线程)。
 
再次感谢pBe。
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-6 00:20:25 | 显示全部楼层
您好Mircea,谢谢您的回复和建议-我认为这是一个很好的选择。
 
再次感谢。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:21 , Processed in 0.597256 second(s), 68 queries .

© 2020-2025 乐筑天下

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