転置行列のコード
他の方のブログを見て知った。
転置行列は、Schemeで短く書ける。
(define (transposed-mat A) (apply map list A))
ちなみに以前、
作成日記 Schemeで数値計算(1) - nibosiiwasi’s blog
で私が書いた転置行列のコードはこれ↓。長いだけだな。
;;行列を、1列目とその他に分ける (define (col1sep-mat A) (define (col1sep-mat-pre A tmp1 tmp2) (if (null? A) (cons tmp1 tmp2) (col1sep-mat-pre (cdr A) (append tmp1 (list (list (caar A)))) (append tmp2 (list (cdr (car A))))))) (col1sep-mat-pre A '() '() )) ;;1列を1行に変換 (define (col2line col) (define (col2line-p col tmp) (if (null? col) tmp (col2line-p (cdr col) (append tmp (list (caar col)))))) (col2line-p col '() )) (define (transposed-mat A) (define (transposed-mat-p A tmp) (if (null? (car A)) tmp (transposed-mat-p (cdr (col1sep-mat A)) (append tmp (list (col2line (car (col1sep-mat A)))))))) (transposed-mat-p A '() ))