【发布时间】:2021-10-21 01:23:56
【问题描述】:
目前,我正在努力找出一个函数,该函数可以确定一个点是否在正方形中,或者没有给定正方形的边长和左上角。
; tl is a Posn, giving the top-left corner of the square
; side is a Number, giving the side length of the square
(define-struct SQ (tl side))
(define z (make-SQ tl side))
(define x (+ (posn-x SQ-tl z) (SQ-side z)))
(define y (+ (posn-y SQ-tl z) (SQ-side z)))
(define a (make-posn x y))
; Posn, SQ -> Boolean
(define (point-in-square? P S) (and (<= (posn-x P) (posn-x a) S)
(>= (posn-x P) (posn-x (SQ-tl z)) S)
(<= (posn-y P) (posn-y a) S)
(>= (posn-y P) (posn-y (SQ-tl z)) S)))
我收到错误tl: undefined; cannot reference undefined identifier
我该如何解决这个错误?
【问题讨论】:
-
(define z (make-SQ tl side))-- 代码在某些参数上调用make-SQ:tl的值是多少?side的值是多少? -
tl指的是SQ的tl,side是SQ的side -
你错了,这是我试图暗示的错误消息的来源。在调用
(make-SQ tl side)中,尝试评估tl,结果值应该用于构造SQ结构。但是,tl还没有被赋予任何价值!如果您通过执行(define my-posn (make-posn 4 2))之类的操作来解决此问题,然后调用(make-SQ my-posn side),您将解决tl的问题,但不会解决side的问题。您必须向make-SQ提供适当的值,才能构造SQ结构。 -
是的,如果
my-number评估为适当的值。大概SQ边只是代表边长的数字;看起来posn是一个结构,其中包含x和y字段的数字。因此,您可以执行类似(define my-SQ (make-SQ (make-posn 4 2) 1))的操作来创建一个边长 1 位于 (4, 2) 的SQ。 -
我认为代码的主要问题是方块在每个测试用例中随机移动。我怎么能在不使用特定数字的情况下使用它(我可能想多了)。