(lambda (d) (let D ((d d)) (if (null? d) '() (let ((m (D (cdr d))))
  (cons (cons (car d) (let T ((t (cdr d)))
              (if (null? t) '() (cons 0 (T (cdr t))))))
        (map (lambda (z) (cons 0 z)) m))))))
; test
(diag '(2 3 4)) ; => ((2 0 0) (0 3 0) (0 0 4))