2015-02-23 59 views
-1

函數作爲後續於this問題的結果,我有一個返回包含一個輸入數組的數組,然後在函數計算某些其它元件的功能。F#線程通過Array.Reduce

我想使用高階函數多次調用此函數,每次線程現有函數調用的結果陣列到下一個功能調用。我相信array.map是最好的選擇,但我不確定。這是我迄今爲止(注意最後一行不編譯):

let myFunction (index:int, allLetters: string[]) = 
    let computedArray = [|"A";"B";"D"|] 
    Array.append allLetters computedArray 

let allLetters = [||] 
[|1..10|] |> Array.reduce(fun acc -> myFunction(acc,allLetters)) 

我在正確的軌道上?

這裏是什麼我要完成一個畫面: enter image description here

我想將數組傳遞到與索引 下一個功能(INT;串[])和欲返回字符串[ ]。我想通過新索引傳入下一個函數。

在此先感謝。

+1

'Array.fold'? 'Array.scan'?我不清楚你想要達到什麼目的。你能分享一些輸入數據和預期輸出嗎? – 2015-02-23 22:50:00

+0

在原始問題中添加了一張圖片。這有幫助嗎? – 2015-02-24 02:27:04

+0

對不起,這並沒有多大幫助。第五個樣本中的「E」來自哪裏? – 2015-02-24 07:25:27

回答

0

我不明白究竟要達到什麼樣的,請澄清。所以很難拿出一個示例代碼,無論如何從我的理解:無論如何,從我的理解:

Array.map這似乎沒有幫助,因爲每個函數應用程序是獨立的數組的每個元素,但你需要線程累加器。

Array.fold可能是你在找什麼。它計算所有數組元素之間的函數,這些數組元素對前一個函數應用程序的結果進行線程化您需要指定累加器的初始狀態。

Array.reduce只是數組的第一個元素用作初始狀態(累加器)的特殊摺疊,當然如果數組是空的,它將失敗。

+0

在原始問題中添加了一張圖片。這有幫助嗎? – 2015-02-24 02:26:42

+0

謝謝,但如果給出相同的輸入(情況3和4),您希望獲得不同的輸出,怎麼可能? – Gustavo 2015-02-24 08:04:15

+0

副作用編程。 :-) – 2015-02-24 11:44:22

0

如果你看一下MSDN,這裏是降低例如:

let names = [| "A"; "man"; "landed"; "on"; "the"; "moon" |] 
let sentence = names |> Array.reduce (fun acc item -> acc + " " + item) 

我再補充說,拉姆達調用一個函數:

let firstLetter (s:System.String) = s.Substring(0,1) 
let names = [| "A"; "man"; "landed"; "on"; "the"; "moon" |] 
let sentence = names |> Array.reduce (fun acc item -> acc + " " + firstLetter(item)) 

然後我加入了第二個參數firstLetter功能:

let firstLetter (s:System.String, s':System.String) = s.Substring(0,1) 
let names = [| "A"; "man"; "landed"; "on"; "the"; "moon" |] 
let sentence = names |> Array.reduce (fun acc item -> acc + " " + firstLetter(item, acc)) 

最後,我改變了從firstL埃特功能是一個元組:

let firstLetter (s:System.String, s':System.String) = s.Length, s.Substring(0,1) 
let names = [| "A"; "man"; "landed"; "on"; "the"; "moon" |] 
let sentence = names |> Array.reduce (fun acc item -> acc + " " + firstLetter(item, acc)) 

編譯器不喜歡:

類型「詮釋*字符串」不匹配的類型「字符串」

所以看起來像reduce累加器需要與數組中類型相同的類型是什麼得到了減少應用?

+0

是的,類型應該是相同的。對於摺疊,由於累加器的類型可能是其他內容,因此您有更多的靈活性。請下一次給我發一條消息,因爲如果你把你的問題寫成答案,我不會收到通知。 – Gustavo 2015-02-27 17:40:53