wpower12 发表于 2022-7-5 23:10:02

VL-REMOVE-IF帮助

我一直在尝试使用VisualLisp实现一个2D装箱解决方案。我有一个不错的工作脚本,但我缺少打包算法的一个主要组件。我需要挑选一个代表垃圾箱中可用空间的列表。这些可用空间由“自由矩形”表示,并存储在表单列表中((x\u ins y\u ins)x y)。每次迭代,该列表都会随着新项目的放置和可用空间的更改而增长。维护该列表的一部分是,每次迭代都必须检查列表中是否有冗余矩形。对于每一个有序的自由矩形对,我需要检查一个是否在另一个之内或等于另一个。如果是,则必须从列表中删除另一个内的自由矩形。
 
为了简化我的尝试,我从VL-REMOVE-IF语句开始,但很快意识到我做得不对。这是我糟糕的第一次尝试:
 
(setq
        fr (vl-remove-if (function (lambda (a1 a2)
                                                     
                (setq one_xi(car (car a1))
                        one_yi(nth 1 (car a1))
                        one_x   (nth 1 a1)
                        one_y   (nth 2 a1))
                (setq                   ;ITEM                      
                        two_xi(car (car a2))
                        two_yi(nth 1 (car a2))
                        two_x   (nth 1 a2)
                        two_y   (nth 2 a2))
                (setq
                        T_check(- (+ one_yi one_y ) (+ two_yi two_y ))
                        B_check(- two_yi one_yi)
                        L_check(- two_xi one_xi)
                        R_check(- (+ one_xi one_x) (+ two_xi two_x)))
                (AND (>= T_check 0)
                        (>= B_check 0)
                        (>= L_check 0)
                        (>= R_check 0))
                                                     )) fr)
                       )
 
 
我现在知道,传递给remove if的测试函数只需要有1个参数。我不知道如何将这些与lambda中的一个论点进行比较。欢迎提供任何建议。
页: [1]
查看完整版本: VL-REMOVE-IF帮助