Допустим, я хочу транспонировать 2 x n "матрицу" (список списков) mat
. Идиоматический способ сделать это в ракетке -
(apply map list mat)
Чтобы сделать то же самое в typed / racket, мне нужно немного помочь контролеру типов. Тип map
в этом случае
(All (c a b ...)
(-> (-> a b ... b c) (Listof a) (Listof b) ... b (Listof c)))
Поскольку я имею дело с матрицей 2 x n, я должен создать экземпляры a и b как Number
:
(apply (inst map (Listof Number) Number Number)
(inst list Number)
mat)
Если mat
была матрица 3 x n,
(apply (inst map (Listof Number) Number Number Number)
(inst list Number)
mat)
Сделал бы трюк. Теперь предположим, что я имею в виду матрицу m x n, где m - неизвестное положительное целое число. Есть ли общий способ создания карты, который бы работал для любого значения m?