lamensterms 发表于 2022-7-5 23:11:55

等式,=,等于但不等于case sens

嘿伙计们,
 
我有一个例行程序,比较和更新标题栏中的修订值,并发现需要考虑一些值是否相等。。。但忽略了人物的情况。
 
例如,我希望例程将“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 发表于 2022-7-5 23:27:32

您可以在比较时将字符串强制为大写。
 
(setq s1 "lamensterms"s2 "Lamensterms") (eq (strcase s1)(strcase s2))
 
这足以满足你的需要吗?

lamensterms 发表于 2022-7-5 23:29:58

你好,pBe,
 
非常感谢您的回复。我不确定你提供的代码是否可以应用到例程中(至少,可能不是我目前构建代码的方式)。
 
我当前的(部分)代码是:
 
((= crev "A")
(SETQ nrev "B"))
((= crev "B")
(SETQ nrev "C"))
((= crev "C")
(SETQ nrev "D"))
 
其中,“crev”是当前版本,从版本块内的属性中提取,“nrev”是要设置的新版本。
 
任何小写修订字母都是打字错误,我真的不需要更正现有修订的大小写。。。但我希望例程能够在任何情况下读取值——如果这有意义的话。
 
所以如果crev=A,nrev=B,如果crev=A,nrev=B,依此类推。。
 
我可以简单地将以下几行添加到我的例程中:
 
((= crev "a")
(SETQ nrev "B"))
((= crev "b")
(SETQ nrev "C"))
((= crev "c")
(SETQ nrev "D"))
 
但我只是好奇是否有另一种方法,用一个不那么严格的“=”函数。

pBe 发表于 2022-7-5 23:44:51

我懂了,
 
(if (setq a (assoc (strcase crev) '(("A" "B") ("B" "C") ("C" "D")("D" "E"))))
(setq nrev (cadr a))
)
 
现在,如果列表中没有定义值或CREV呢?例如“E”,就像你说的,拼写错误像“A”
 
甚至更好
 
(chr (1+ (Ascii (strcase crev ))))

pBe 发表于 2022-7-5 23:50:40

至于字符串比较:这里有一个快速而肮脏的代码[为了好玩]
 
(defun _equalstr (s1 s2)
(wcmatch s1
   (apply 'strcat
          (mapcar '(lambda (x)
                     (if (<= 65 x 90)
                     (strcat "[" (chr x) (chr (+ 32 x)) "]")
                     (chr x)
                     )
                   )
                  (vl-string->list (strcase s2))
          )
   )
)
)
 
(_equalstr“CADTutor here”“CADTutor here”)
(_equalstr“敏捷的棕色狐狸跳过懒狗”,“敏捷的棕色狐狸跳过懒狗”)
 
当然,只要使用strcase函数,它的加载就更容易了

MSasu 发表于 2022-7-6 00:02:24

Lamenterms,为了确保您的代码摘录在任何情况下都有效,您还可以确保crev变量在进行比较之前是大写的:
(setq crev (strcat crev))
...
((= crev "A")
(SETQ nrev "B"))
((= crev "B")
(SETQ nrev "C"))
((= crev "C")
(SETQ nrev "D"))

lamensterms 发表于 2022-7-6 00:03:30

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

lamensterms 发表于 2022-7-6 00:20:25

您好Mircea,谢谢您的回复和建议-我认为这是一个很好的选择。
 
再次感谢。
页: [1]
查看完整版本: 等式,=,等于但不等于case sens