,所以我有以下的樹狀數據結構:找到產生一個正樹產量最大的功能
data Tree = Node (Int -> Int) Int [Tree]
基本上,每個節點都包括一個標籤功能(Int -> Int)
,標籤Int
和的子樹列表。現在我想寫一個函數,當給定一個Tree和一個Int時,找到能夠用給定輸入產生最大輸出的函數。
我能找到最大的輸出,如果我應用該功能,但我似乎無法找到相關的功能。
tmax :: Int -> Tree -> Int
tmax l (Node func _ []) = func l
tmax l (Node func _ xs) = max (func l) $ maximum $ map (tmax l) xs
這給了我應用於l時可以由任何函數產生的最大輸出。
的預期功能的一些例子:
t2 = Node (+1) 1 [Node (+5) 2 [], Node (-3) 7 [], Node (\x -> x*x) 4 []]
(+1) 1
/-------|-------\
(+5) 2 (-3) 7 (\x -> x*x) 4
所以,如果我申請tmax 4 t2
,答案是(\x -> x*x)
,因爲這會帶來最大的產出。如果我執行tmax 2 t2
,則輸出將是(+5)
,因爲那樣會產生最大的輸出。然而,我目前的功能只會提供最大的價值,但不是功能。因此,對於第一個例子,它將提供16,第二個7.
謝謝!
目前尚不清楚您打算如何使用此數據結構以及您想要的結果。請提供更多信息。 – leftaroundabout 2014-11-25 10:42:35
增加了一個應該如何工作的例子。 – pgrosslicht 2014-11-25 10:51:51