明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 545|回复: 7

[提问] 求一个或门逻辑关系函数

[复制链接]
发表于 2025-1-11 12:46:12 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 hn10183051 于 2025-1-11 13:13 编辑

研究一个表的或门逻辑关系,求高手指点!
  1. (("1.85" "1800" "4000" "100") ("1.85" "1700" "5500" "100")
  2. ("1.85" "1600" "5000" "100") ("1.85" "1500" "4500" "100")
  3. ("1.85" "1400" "4200" "100") ("1.85" "1300" "4200" "100")
  4. ("1.85" "1200" "3500" "100") ("1.85" "1100" "2500" "100")
  5. )

  6. ;当2个比较结果不一致时写入结果最大值,反之写入相同结果
  7. (("1.85" "1800" "4000" "100" "4") ("1.85" "1700" "5500" "100" "4")
  8. ("1.85" "1600" "5000" "100" "3") ("1.85" "1500" "4500" "100" "2")
  9. ("1.85" "1400" "4200" "100" "1") ("1.85" "1300" "4200" "100" "1")
  10. ("1.85" "1200" "3500" "100" "0") ("1.85" "1100" "2500" "100" "0")
  11. )
复制代码
  1. (DEFUN C->TH (C D / TH);比较表第2个元素
  2.   (COND
  3.     ((AND (>= 1300 C ) (>= 4000 D ))(setq TH 0))
  4.     ((AND (>= 1400 C ) (>= 4200 D ))(setq TH 1))
  5.     ((AND (>= 1500 C ) (>= 4500 D ))(setq TH 2))
  6.     ((AND (>= 1600 C ) (>= 5000 D ))(setq TH 3))
  7.     (T (setq TH 4))
  8.    
  9.   )
  10.   TH
  11. )

  12. (C->TH 900 4000)   0
  13. (C->TH 900 5500)   4
  14. (C->TH 1300 4400)  2
  15. (C->TH 1400 4400)  2
  16. (C->TH 1500 4400)  2
  17. (C->TH 1600 300)   3
  18. (C->TH 1700 200)   4

最佳答案

查看完整内容

(tt'(("1.85" "1800" "4000" "100") ("1.85" "1700" "5500" "100") ("1.85" "1600" "5000" "100") ("1.85" "1500" "4500" "100") ("1.85" "1400" "4200" "100")("1.85" "1300" "4200" "100") ("1.85" "1200" "3500" "100") ("1.85" "1100" "2500" "100") )) => (("1.85" "1800" "4000" "100" "4") ("1.85" "1700" "5500" "100" "4") ("1.85" "1600" "5000" "100" "3") ("1.85" "1500" "4500" "100" "2") ("1.85" "1400" "4200" ...
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2025-1-11 12:46:13 | 显示全部楼层
  1. (defun tt(lst)
  2.   (mapcar(function(lambda(x / a b)
  3.         (setq a(atoi(cadr x))
  4.         a(COND((>= 1300 a)0)((>= 1400 a)1)((>= 1500 a)2)((>= 1600 a)3)(t 4))
  5.         b(atoi(caddr x))
  6.         b(COND((>= 4000 b)0)((>= 4200 b)1)((>= 4500 b)2)((>= 5000 b)3)(t 4)))
  7.         (append x(list(itoa(max a b))))))lst))

(tt'(("1.85" "1800" "4000" "100") ("1.85" "1700" "5500" "100") ("1.85" "1600" "5000" "100") ("1.85" "1500" "4500" "100") ("1.85" "1400" "4200" "100")("1.85" "1300" "4200" "100") ("1.85" "1200" "3500" "100") ("1.85" "1100" "2500" "100") ))
=>
(("1.85" "1800" "4000" "100" "4") ("1.85" "1700" "5500" "100" "4") ("1.85" "1600" "5000" "100" "3") ("1.85" "1500" "4500" "100" "2") ("1.85" "1400" "4200" "100" "1") ("1.85" "1300" "4200" "100" "1") ("1.85" "1200" "3500" "100" "0") ("1.85" "1100" "2500" "100" "0"))


回复

使用道具 举报

 楼主| 发表于 2025-1-11 13:23:05 | 显示全部楼层
(defun tt1 (lst)
  (mapcar (function (lambda (x / a b)
                      (setq C (atoi (cadr x)))
                                        (setq D (atoi (caddr x)))
                             (COND
                ((AND (>= 1300 C ) (>= 4000 D ))(setq TH 0))
                ((AND (>= 1400 C ) (>= 4200 D ))(setq TH 1))
                ((AND (>= 1500 C ) (>= 4500 D ))(setq TH 2))
                ((AND (>= 1600 C ) (>= 5000 D ))(setq TH 3))
                (T (setq TH 4))
               
        )
                                                 
                      (append x (list (itoa TH)))
                    )
          )
          lst
  )
)

点评

注意控制局部变量,内部用and计算0123用t给4,结果可能是错的,比如第二项结果为0,第三项结果为3,根据前边描述,最大值应该取3,但这里它返回4  发表于 2025-1-11 13:27
回复

使用道具 举报

 楼主| 发表于 2025-1-11 13:24:06 | 显示全部楼层
llsheng_73 发表于 2025-1-11 12:46
(tt'(("1.85" "1800" "4000" "100") ("1.85" "1700" "5500" "100") ("1.85" "1600" "5000" "100") ("1.85 ...

谢谢,llsheng_73大神
回复

使用道具 举报

发表于 2025-1-11 13:46:40 | 显示全部楼层
hn10183051 发表于 2025-1-11 13:23
(defun tt1 (lst)
  (mapcar (function (lambda (x / a b)
                      (setq C (atoi (cadr x)))

看错了,好象不会出现结果不正确的情况,因为几个梯度是逐级增大的。。。比如1300以下它可以返回01234
1600只能返回3,1600以上只能返回4,没注意到区间的这种划分办法可以直接隐含或逻辑...
回复

使用道具 举报

发表于 2025-1-11 13:51:09 | 显示全部楼层
坐标系中划分一下,不能有重叠或遗漏区域,没那么复杂。
回复

使用道具 举报

发表于 2025-1-11 14:20:44 | 显示全部楼层
  1. (defun c->th (c d)
  2.   (cond ((and (>= 1300 c) (>= 4000 d)) 0)
  3.         ((and (>= 1400 c) (>= 4200 d)) 1)
  4.         ((and (>= 1500 c) (>= 4500 d)) 2)
  5.         ((and (>= 1600 c) (>= 5000 d)) 3)
  6.         (t 4)
  7.   )
  8. )
  9. ;(tt lst)
  10. (defun tt (lst)(mapcar '(lambda (x)  (append x (list (itoa (c->th (atoi (cadr x)) (atoi (caddr x))))))) lst))
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-23 11:58 , Processed in 0.245791 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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