Simplifying Dr.Racket drawing code
There are significant issues here:

; draw-rocket: rocket scene --&gt; scene
; Purpose: To draw the given rocket in the given scene
(define (draw-rocket a-rocket a-scene) 
(place-image rocket-img a-rocket ROCKET-Y a-scene))


Why break the pattern from drawing code for the others? Use (pos-x a-rocket), (pos-y a-rocket) instead of a-rocket ROCKET-Y. That will help you abstract the code later on.

; draw-aliens: loa scn --&gt; scene 
; Purpose: To draw the aliens in the given scene 
(define (draw-shots a-los scn) 
(cond [(empty? a-los) scn] 
[else (draw-shot (first a-los) (draw-shots (rest a-los) scn) 
         )])) 


This method has the wrong purpose and signature. This should be:

; draw_shots: los scn --&gt; scn
; Purpose: To draw the shots in the given scene




This code seems to have multiple issues:

; draw-world: world --&gt; scene
; Purpose: Draw the world in the empty scene
(define (draw-world a-world)
(draw-rocket (world-rocket a-world) 
(draw-aliens (world-aliens a-world)



The parentheses are mismatched, as mentioned in the comments.
Why are the draw-shots methods not called here?


I also think that you want to nest the calls so that the results are cumulative.
This is done like so:

; draw-world: world --&gt; scene
; Purpose: Draw the world in the scene (why would does it have to be empty?)
(define (draw-world a-world)
(draw-shots (world-shots 
(draw-rocket (world-rocket 
(draw-aliens (world-aliens a-world)))))))




As for using higher-order functions:

Try using foldr like so:

(define (draw-shots a-los scn)
(foldr draw-shot (first a-los) (rest a-los)))


Similarly, you can apply this to all the functions on lists.



Finally, using abstraction is very easy here. Create a new type, called Sprite or Actor or something similar, and have Aliens, Shots and Rocket all extend it. That way you only need 2 functions: 1 for singular, 1 for plural.