You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Racket实现矩形相交列表筛选的代码调用问题求助

代码存在的核心问题

    1. 主入口函数定义逻辑混乱、括号不匹配,无法正常被Racket解析运行
    1. Intersect函数参数命名误导(第一个参数是单个矩形而非矩形列表),且坐标访问逻辑完全错误:错误使用cdr获取列表剩余片段而非单个坐标值,四元素矩形列表的坐标需要用car/cadr/caddr/cadddr分别取第1到第4个值
    1. 矩形相交判断逻辑不严谨,轴对齐矩形相交需要同时满足x轴投影相交、y轴投影相交两个条件,原代码判断逻辑冗余且坐标对应关系错误
    1. 递归收集结果时直接用cons往结果列表头部追加元素,最终返回的结果顺序和原列表顺序相反,可按需调整

修正后的可运行代码

#lang racket

;; 主函数:输入矩形列表rect-list、单个矩形target-rect,返回所有和target-rect相交的矩形列表
(define (get-intersect-rects rect-list target-rect)
  (recursion rect-list target-rect '()))

;; 递归遍历工具函数
(define (recursion rect-list target-rect returned-list)
  (if (< (length rect-list) 1)
      (reverse returned-list) ;; 不需要保持原列表顺序可删除reverse
      (recursion (cdr rect-list)
                 target-rect
                 (if (intersect? (car rect-list) target-rect)
                     (cons (car rect-list) returned-list)
                     returned-list))))

;; 矩形相交判断函数:匹配测试用例的矩形格式'(x左 x右 y下 y上)
(define (intersect? rect-a rect-b)
  (let ([a-x1 (car rect-a)]
        [a-x2 (cadr rect-a)]
        [a-y1 (caddr rect-a)]
        [a-y2 (cadddr rect-a)]
        [b-x1 (car rect-b)]
        [b-x2 (cadr rect-b)]
        [b-y1 (caddr rect-b)]
        [b-y2 (cadddr rect-b)])
    ;; 满足x轴投影相交 且 y轴投影相交即判定为相交
    (and (< a-x1 b-x2)
         (> a-x2 b-x1)
         (< a-y1 b-y2)
         (> a-y2 b-y1))))

;; 测试用例
(define test-rect-list (list '(2 4 6 1) '(1 8 4 4) '(0 5 4 0)))
(define test-rect '(1 3 5 2))
;; 调用测试,输出符合预期的相交矩形列表
(get-intersect-rects test-rect-list test-rect)

运行说明

你提供的测试用例运行后返回结果为'((1 8 4 4) (0 5 4 0)),符合相交判断的预期。

内容的提问来源于stack exchange,提问作者MareeSky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:15:08