乐筑天下

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

[编程交流] VL-REMOVE-IF帮助

[复制链接]

4

主题

7

帖子

3

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:10:02 | 显示全部楼层 |阅读模式
我一直在尝试使用VisualLisp实现一个2D装箱解决方案。我有一个不错的工作脚本,但我缺少打包算法的一个主要组件。我需要挑选一个代表垃圾箱中可用空间的列表。这些可用空间由“自由矩形”表示,并存储在表单列表中((x\u ins y\u ins)x y)。每次迭代,该列表都会随着新项目的放置和可用空间的更改而增长。维护该列表的一部分是,每次迭代都必须检查列表中是否有冗余矩形。对于每一个有序的自由矩形对,我需要检查一个是否在另一个之内或等于另一个。如果是,则必须从列表中删除另一个内的自由矩形。
 
为了简化我的尝试,我从VL-REMOVE-IF语句开始,但很快意识到我做得不对。这是我糟糕的第一次尝试:
 
  1. (setq
  2.         fr (vl-remove-if (function (lambda (a1 a2)
  3.                                                      
  4.                 (setq one_xi  (car (car a1))
  5.                         one_yi  (nth 1 (car a1))
  6.                         one_x   (nth 1 a1)
  7.                         one_y   (nth 2 a1))
  8.                 (setq                   ;ITEM                      
  9.                         two_xi  (car (car a2))
  10.                         two_yi  (nth 1 (car a2))
  11.                         two_x   (nth 1 a2)
  12.                         two_y   (nth 2 a2))
  13.                 (setq
  14.                         T_check  (- (+ one_yi one_y ) (+ two_yi two_y ))  
  15.                         B_check  (- two_yi one_yi)
  16.                         L_check  (- two_xi one_xi)
  17.                         R_check  (- (+ one_xi one_x) (+ two_xi two_x)))
  18.                 (AND (>= T_check 0)
  19.                         (>= B_check 0)
  20.                         (>= L_check 0)
  21.                         (>= R_check 0))
  22.                                                      )) fr)
  23.                          )

 
 
我现在知道,传递给remove if的测试函数只需要有1个参数。我不知道如何将这些与lambda中的一个论点进行比较。欢迎提供任何建议。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:11 , Processed in 0.513877 second(s), 54 queries .

© 2020-2025 乐筑天下

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