明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3221|回复: 10

[求助]怎么判断两个表相等?

[复制链接]
发表于 2007-7-17 08:40:00 | 显示全部楼层 |阅读模式
    在LISP里怎么判断两个表是相等的?eq和equal命令都不行,该用什么判断?
发表于 2007-7-17 08:57:00 | 显示全部楼层
转成字符串再用EQ 或者说 = 或者 equal 比较就行了,因为两个表里面要是有实数时,看上去实数是相等的,但是我们没有看到实数的全部的小数(因为实数的小数点后面精确的位数很多)所以直接比较时容易出现不通过的现象从而导至我们想不清楚是什么原因喽.
 楼主| 发表于 2007-7-17 09:50:00 | 显示全部楼层

这个表是个点,点里面还有很多点对,是很多实数,需要近似相等,楼上的方法不太可行,但是提醒我了,再试试,谢谢!

发表于 2007-7-17 10:00:00 | 显示全部楼层
_$ (setq a '(1 (2 3.13)))
(1 (2 3.13))
_$ (setq b '(1 (2 3.14)))
(1 (2 3.14))
_$ (equal a b 0.1)
T
_$ (setq c (list 1 (cons "as" 3.14)))
(1 ("as" . 3.14))
_$ (setq d (list 1 (cons "as" 3.15)))
(1 ("as" . 3.15))
_$ (equal c d 0.1)
T
发表于 2007-7-17 12:46:00 | 显示全部楼层
加一个误差范围控制应该可以.
发表于 2007-7-17 12:46:00 | 显示全部楼层
加一个精确程度控制应该可以.
发表于 2007-7-17 13:18:00 | 显示全部楼层

我刚写一个任意图元求交点的函数,里面用到了,这是我的方法:

转换字符串判断,适用于有很小误差的点判断

(if (and 
      (= (rtos (car a) 2 4) (rtos (car b) 2 4))
      (= (rtos (cadr a) 2 4) (rtos (cadr b) 2 4))
      (= (rtos (last a) 2 4) (rtos (last b) 2 4))
    )

(setq ok t)

(setq ok nil)

)

点评

猫老师,谢谢了!我正想要这个!  发表于 2012-10-2 22:58
发表于 2007-7-17 21:56:00 | 显示全部楼层
4楼已经说得很明确了:
(equal  a  b  0.0001)
发表于 2007-7-17 22:04:00 | 显示全部楼层
  1. ;;;xyp自主的
  2. (defun test (plst1 plst2 / a b)
  3.   (setq a t
  4.         b t
  5.   )
  6.   (foreach n plst1
  7.     (if (not (member n plst2))
  8.       (setq a nil)
  9.     )
  10.   )
  11.   (foreach n plst2
  12.     (if (not (member n plst1))
  13.       (setq b nil)
  14.     )
  15.   )
  16.   (if (or
  17.         (= a nil)
  18.         (= b nil)
  19.       )
  20.     nil
  21.     t
  22.   )
  23. )
发表于 2007-7-18 11:34:00 | 显示全部楼层
用户用捕捉方式所画的图中,如果图比较大,会出现一些误差,有时会出现10的负12次方的微小误差,所以用equal等衡等函数去判断,会有返回nil的现象,所以建议通过rtos消去误差的影响
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 07:33 , Processed in 0.197913 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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