Bir görev için [Int -> Int]
(ör. [(+3), (*4), (+1)]
) işlevlerinin bir listesi üzerinde çalışıyorum ve bunların her birine tek bir Int
uygulamak ve sonuçların bir listesini oluşturmak istiyorum [Int]
Haskell, işlevlerin bir listesine tek bir değer uygular
Zaten çok arama yaptım, ancak böyle bir işlemi yapmanın bir yolunu bulamıyorum. map
'u kullanarak beklediğim gibi çalışmıyor. Bu gerçekten çalışıyor
data Tree = Node (Label -> Label) Label [Tree]
type Label = Int
testTree = Node (+1) 3 [ Node (+1) 5 [], Node (+1) 4 [Node (+1) 1 [], Node (+2) 7 []]]
listify :: Tree -> [(Label -> Label)]
listify t = [(getNodeFunction t)] ++ concat(map (listify) (getSubTrees t))
*Main> map (\f -> f 7) (listify testTree)
:
ERROR - Cannot infer instance
*** Instance : Num ((Label -> Label) -> a)
olarak kodu talebinde: İlgili hata budur. Dosyada bir hata kodu parçası vardı, yaygara için özür dilerim.
map map kullanan haritayı göster –
Bu, ilgili değil ama 'Tree 'türünüz biraz garip. Tam olarak ne yapmaya çalıştığını bilmiyorum, ama iki kavramı bir araya getiriyor gibi görünüyor: şeylerin bir ağacını yapmak ve bazı şeyleri bir araya getirmek. 'Data.Tree' (GHC ile birlikte gelen "konteynerler" paketinden) kullanmayı düşünebilirsiniz, bu durumda türünüze oldukça yakın bir nokta "Ağaç (Etiket -> Etiket, Etiket)" olarak ifade edilebilir. Bunu böldüğünüzde, her türlü genel amaçlı “Ağaç” işlevlerini kullanırsınız. – dfeuer
Bu ağaç türü ödevde verilmiştir. Muhtemelen, öğrencilerin yaşadığı cehennemden rahatsız olma niyeti ile. – nitowa