• The function generate consumes a natural number (n) and creates a list of that many ``diagonalized'' Posns:

    ;; generate : NaturalNumber -> Listof[Posn]
    ;; creates a list of that many ``diagonalized'' posns
    (define (generate n) 
      (cond
        [(zero? n) empty]
        [else (cons (make-posn n n) (generate (sub1 n)))]))
    
    ;; Examples/tests: 
    (equal?
      (generate 2)
      (list (make-posn 2 2) (make-posn 1 1)))
    (equal?
      (generate 3) 
      (list (make-posn 3 3) (make-posn 2 2) (make-posn 1 1)))
    

    Solution

    (define (generate n) ;; [PT 2 -- 1 for helper, 1 for (- n i)]
     (local ((define (diag i) (make-posn (- n i) (- n i))))
       (build-list n diag))) ;; [PT 1 -- for build-list]