(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))