我正在嘗試編寫一個簡單的F#函數,可以將數組傳遞給該函數,然後打印這些值,但我遇到了麻煩。這是我到目前爲止:將數組傳遞到函數
let a = [| a; b; c; d |];;
let f arrayFunction (string[] array) = function
for b=0 to array.Length
Console.WriteLine(array.[]);;
我正在嘗試編寫一個簡單的F#函數,可以將數組傳遞給該函數,然後打印這些值,但我遇到了麻煩。這是我到目前爲止:將數組傳遞到函數
let a = [| a; b; c; d |];;
let f arrayFunction (string[] array) = function
for b=0 to array.Length
Console.WriteLine(array.[]);;
用於定義參數的F#語法是從C#語法向後;在F#中,參數的名稱是第一個,然後是類型(用冒號分隔兩個)。
您也不需要function
這裏的關鍵字,只是正常的let
綁定 - function
是用於創建匿名模式匹配功能。但是,您需要在for
循環的行尾添加do
。最後,F#for
循環中的to
之後的值是包含性的 - 所以您需要從數組長度中減去一個值,否則最終會引發IndexOutOfRangeException。
你的函數應該這樣寫:
let a = [| a; b; c; d |];;
let f arrayFunction (array : string[]) =
for b = 0 to array.Length - 1 do
Console.WriteLine (array.[b]);;
傑克的答案是完全正確的F#但有內置函數來執行這類任務。在這個例子中,我們可以將數組發送到Array.iter,它將迭代每個項目並將項目傳遞給字符串 - >單元函數。
所以一個例子可能是這樣的:
let a = [| "a"; "b"; "c"; "d" |];;
let f arrayFunction (array : string[]) =
array |> Array.iter arrayFunction;;
a |> f Console.WriteLine;;
太好了,謝謝。要調用這個函數,我可以使用:arraryFunction(a);; ? – 2013-04-28 23:38:07
@JohnOriely arrayFunction(在你的例子中)是一個參數,在這種情況下它是一個參數是一個函數。我調用'f'函數傳遞Console.WriteLine作爲示例最後一行中的arrayFunction參數。 – 2013-04-29 05:20:40
@ Gary.S如果你知道輸入是一個數組,你應該使用Array.iter而不是Seq.iter。後者比較慢,因爲它使用枚舉器遍歷數組而不是循環。 – 2013-04-29 10:54:43
除了其他的答案 - 你並不需要顯式地指定數組參數的類型。類型推斷通常可以很好地處理它(取決於更廣泛的上下文)。所以例如這個作品:
let a = [| "a"; "b"; "c"; "d" |]
let f arrayFunction array =
array |> Seq.iter arrayFunction
let printme s = printfn "%s" s
f printme a
哇這很完美。非常感謝您的幫助和解釋! – 2013-04-28 16:43:40