[plt-scheme] thanks, but help again

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Tue Mar 30 18:52:24 EST 2004

Please see my explanation. -- Matthias


On Mar 30, 2004, at 1:20 AM, Zhu Chongkai wrote:

>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> 2004-03-30 10:27:11 Connor Ferguson:
>>
>> Sorry for the delay. Things have been really hectic for me the past 
>> few
>> days.
>>
>> Ok, here are my data definitions for UFO and shot/f
>>
>> ;; a UFO is a shape
>> ;; (make-ufo p l w c)
>> ;; where p is a posn, l is a number, w is a number
>> ;; and c is a symbol
>>
>> ;; a shot is a stucture
>> ;;(make-shot start l w col)
>> ;; where start is a posn (the position of the AUP)
>> ;; l is a number, w is a number, and col is a symbol
>>
>> ;; a shot/f is either
>> ;; a shot or;
>> ;; false
>>
>> Like Matthias said, I altered hit-shot? so that there are no numbers, 
>> only
>> constants.
>>
>> ;; hit-shot? : shot/f ufo -> boolean
>> (define (hit-shot? shot/f ufo)
>>  (cond
>>    [ (boolean? shot/f) false]
>>    [ else
>>     (cond
>>       [ (and (>= (+ (posn-x (ufo-nw ufo)) (ufo-len ufo))
>>                 (posn-x (shot-posn shot/f)))
>>             (>= (+ (posn-x (ufo-nw ufo)) (ufo-len ufo)
>>                 (+ (posn-x (shot-posn shot/f)) (shot-l shot/f))
>>             (<= (posn-x (ufo-nw ufo))
>>                 (+ (posn-x (shot-posn shot/f)) (shot-l shot/f))
>>             (>= (posn-y (ufo-nw ufo))
>>                 (posn-y (shot-posn shot/f)))
>>             (>= (posn-y (ufo-nw ufo))
>>                 (+ (posn-y (shot-posn shot/f)) (shot-w shot/f)))) 
>> true]
>>       [ else false])]))
>>
>> I had been testing the program only by running it in the context of 
>> the
>> game, but that is not something I should not do, so I formulated these
>> tests.
>>
>> (hit-shot? (make-shot (make-posn 10 10) 2 5 'red)
>>     (make-ufo (make-posn 10 10) 22 4 'green))
>> = false
>>
>> (hit-shot? (make-shot (make-posn 30 30) 2 5 'red)
>>                (make-ufo (make-posn 10 10) 22 4 'green))
>> = false
>>
>> (hit-shot? (make-shot (make-posn 100 100) 2 5 'red)
>>                (make-ufo (make-posn 10 10) 22 4 'green))
>> = false
>>
>> Clearly, these examples demonstrate the problem I筸 having. Basically,
>> everything I put into the program is evaluating to false.
>>
>> Thank you for helping and sorry for taking so long to respond.
>>
>> -Connor
>>
>
> I have to say that your code is rather poor. The parentheses can't
> pair; the names in the structure seems different from you defination;
> there is one redundant cond expression.
>
> I think that the hole game didn't use anything beyond the Beginner
> language level. So you can test it with the stepper yourself.
>
> Here I revise and test the code, and find that the main bug is in the
> forth clause of the and expression. It should be a <= rather than >= .
>
> The following code may work.
>
> ;; hit-shot? : shot/f ufo -> boolean
> (define (hit-shot? shot/f ufo)
>   (cond
>     [(boolean? shot/f) false]
>     [else
>      (and (>= (+ (posn-x (ufo-nw ufo)) (ufo-len ufo))
>               (posn-x (shot-posn shot/f)))
>           (<= (posn-x (ufo-nw ufo))
>               (+ (posn-x (shot-posn shot/f)) (shot-l shot/f)))
>           (>= (posn-y (ufo-nw ufo))
>               (posn-y (shot-posn shot/f)))
>           (<= (posn-y (ufo-nw ufo))
>               (+ (posn-y (shot-posn shot/f)) (shot-w shot/f))))]))
>
>
> -- 
> Zhu Chongkai



Posted on the users mailing list.