Я исхожу из PowerShell, и моя идея состоит в том, чтобы передавать элементы из списка один за другим.
PS> @(1,2,3,4) | ForEach-Object { Write-Output -InputObject $_ }
Это моя наивная попытка прямого перевода, но она передает весь список как объект.
> [4;5;6] |> printfn "%A";;
[4; 5; 6]
val it : unit = ()
Я считаю, что ниже моя ближайшая попытка:
[4;5;6] |> List.map int x |> printfn "%i" x ;;
Однако он выдает мне ошибку:
[4;5;6] |> List.map int x |> printfn "%i" x ;;
-----------^^^^^^^^^^^^^^
stdin(31,12): error FS0001: This expression was expected to have type
'int list -> 'a'
but here has type
''b list'
Как я могу правильно передать элементы из списка?
Если вы хотите напечатать каждый элемент списка в отдельной строке, это будет сделано:
[4;5;6] |> List.iter (printfn "%i")
List.iter
используется для выполнения действия над каждым элементом списка. В этом случае действие printfn %i
. Это может показаться вам немного запутанным, потому что сами элементы никогда не привязаны к имени. Это называется "бесточечным" стилем программирования. В этом случае вы можете использовать лямбду, например:
[4;5;6] |> List.iter (fun x -> printfn "%i" x)
С другой стороны, List.map
используется для создания нового списка путем применения функции к каждому элементу существующего списка. Итак, вы можете сделать что-то вроде этого:
[4;5;6]
|> List.map ((*) 2) // [8;10;12]
|> List.iter (printfn "%i")
Это создает список [8;10;12]
из [4;5;6]
путем умножения каждого элемента исходного списка на 2, а затем печатает каждый элемент нового списка в отдельной строке, как указано выше.