2016-02-11 29 views
1

我試圖用f#玩弄基礎知識,但卡住了。如果您有一般技巧,將不勝感激。關於元組和F中用戶輸入的問題#

#light 
open System 
[<EntryPoint>] 
let main (args : string[]) = 
match args with 
    | [| firstName; lastName; city |] -> 
     printfn "Hi there %s %s from %s" firstName lastName city 
     0 
    | _ -> failwith "Usage: HiThere.exe firstName lastName City";; 

我得到這個錯誤,

val main : args:string [] -> int 

我是看在F#教程,並試圖學習這個功能,但我不明白爲什麼我不能沒有這些錯誤做到這一點。

+0

你想知道爲什麼或如何解決它,請問你需要的是一個問題的答案。 – davejal

+0

哪個教程?這將有助於我們理解你未來的問題。 –

+0

let sumOfSquaresI nums = let mutable acc = 0 for x in nums do acc <- acc + sqr x acc 這是我從這個[視頻](https://youtu.be/HQ887aOZITY?t=14m51s)得到的原始問題,我不完全明白這是如何工作的,沒有遞歸。 – Jsc

回答

1

args.[0], args.[1]. args.[2]有一個很小的錯字。在第二個元素和第三個元素之間有一個.而不是, - 它應該是args.[0], args.[1], args.[2]

編譯器仍然能夠解析它,但它解釋你的代碼爲:

args.[0], (args.[1].args.[2]) 

這在語法上是兩個元素的元組且將其分配給三個元素的元組,讓您得到首先關於元組的錯誤。它會在以後失敗,因爲args不是args.[1]的成員,但這是一個單獨的消息(即編譯器忽略,因爲它報告它發現的那個)。

作爲一個側面說明,你也可以使用模式匹配的陣列和寫:

let main (args : string[]) = 
    match args with 
    | [| firstName; lastName; city |] -> 
     printfn "Hi there %s %s from %s" firstName lastName city 
     0 
    | _ -> failwith "Usage: HiThere.exe firstName lastName City" 
+0

謝謝!仍然無法讓它運行。 – Jsc

+0

有趣,謝謝。我不知道該怎麼做。 – Jsc

+0

您可能還需要用'[]'屬性標記'main'函數。 –