我想創建一個函數map3
,給定一個函數f
和一個元組(a, b, c)
將f
應用於元組的每個成員。功能的預期簽名應該是:函數簽名
('a -> 'b) -> 'a * 'a * 'a -> 'b * 'b * 'b
。
我試了幾種方法:
> let map3 = fun x -> let f = fun (a, b, c) -> (a, b, c) in f x;;
val map3 : 'a * 'b * 'c -> 'a * 'b * 'c
> let map3 = fun x y -> x (let f = fun (a, b, c) -> (a, b, c) in f y);;
val map3 : x:('a * 'b * 'c -> 'd) -> 'a * 'b * 'c -> 'd
> let map3 = fun (x, y, z) -> let f = fun (a, b, c) -> (a, b, c) in f (x, y, z);;
val map3 : x:'a * y:'b * z:'c -> 'a * 'b * 'c
我強烈懷疑,我沒有得到函數簽名是如何工作的。根據what I get,map3
應該有一個輸入和一個輸出,而f
應該輸入一個三元組並返回一個三元組。但是這顯然是錯誤的。我在嘗試實施它時遇到了什麼?
這是一個提示 - 從'let map3 f ='開始。此外,人們不傾向於使用'in'語法 –
我正在努力!我沒有想到這種方法。你也正確的使用'in'。我們課程中提出的這本書很過時。我正在學習這兩種風格,只是爲了讓學習更容易。 – Worice
有許多F#書籍,你可以看看例如http://fsharpforfunandprofit.com/posts/fsharp-in-60-seconds/。 – s952163