F # - для Loop вопрос в F # - PullRequest
       8

F # - для Loop вопрос в F #

3 голосов
/ 30 августа 2011

Я хотел бы написать такую ​​программу (это простой пример, объясняющий, что я хотел бы сделать):

//  #r "FSharp.PowerPack.dll" 

open Microsoft.FSharp.Math

// Definition of my products

let product1 = matrix [[0.;1.;0.]]

let product2 = matrix [[1.;1.;0.]]

let product3 = matrix [[1.;1.;1.]]

// Instead of this (i have hundreds of products) : 

printfn "%A" product1

printfn "%A" product2

printfn "%A" product3

// I would like to do something like this (and it does not work):

for i = 1 to 3 do

printfn "%A" product&i

Заранее спасибо !!!!!

Ответы [ 2 ]

12 голосов
/ 30 августа 2011

Вместо использования отдельных переменных для отдельных матриц, вы можете использовать список матриц:

let products = [ matrix [[0.;1.;0.]] 
                 matrix [[1.;1.;0.]] 
                 matrix [[1.;1.;1.]] ]

Если ваши матрицы жестко закодированы (как в вашем примере), то вы можете инициализировать список, используя обозначения выше. Если они рассчитываются каким-либо образом (например, как диагональ или перестановки или что-то в этом роде), то, вероятно, есть лучший способ создать список, используя List.init или аналогичную функцию.

Если у вас есть список, вы можете перебрать его, используя цикл for:

for product in products do
  printfn "%A" product 

(В вашем примере вы ни для чего не используете индекс - но если вам нужна индексация по какой-то причине, вы можете создать массив, используя [| ... |], а затем обращаться к элементам, используя products.[i])

1 голос
/ 31 августа 2011

Также вы можете сделать это так:

matrix    [ [ 0.; 1.; 0. ];
            [ 1.; 1.; 0. ];
            [ 1.; 1.; 1. ]; ]
    |> Seq.iter(fun p -> printf "%A" p)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...