dla przydziału pracuję nad listą funkcji [Int -> Int]
(np. [(+3), (*4), (+1)]
) i chciałbym zastosować pojedynczy Int
do każdego z nich, co z kolei tworzy listę wyników [Int]
Haskell zastosować pojedynczą wartość na liście funkcji
Już dużo przeszukałem, ale nie jestem w stanie znaleźć sposobu na wykonanie takiej operacji. Używanie map
nie działa tak, jak bym się spodziewał. Powiązany błąd to:
ERROR - Cannot infer instance
*** Instance : Num ((Label -> Label) -> a)
Zgodnie z wnioskiem kod:
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)
to faktycznie działa. Wciąż miał w pamięci plik wadliwego kodu, przepraszam za zamieszanie.
pokaż nam kod, który używa mapy –
Nie jest to związane z twoim pytaniem, ale twój typ 'Tree' jest po prostu trochę dziwny. Nie wiem, co dokładnie próbujesz z tym zrobić, ale wydaje się, że łączy w sobie dwa pojęcia: tworzenie drzewa rzeczy i parowanie pewnych rzeczy razem. Możesz rozważyć użycie 'Data.Tree' (z pakietu' containers', który pochodzi z GHC), w którym to momencie coś bardzo bliskiego twojemu typowi może być wyrażone jako 'Tree (Label -> Label, Label)'. Rozbijając go w ten sposób, można by użyć wszystkich rodzajów funkcji drzewa ogólnego przeznaczenia. – dfeuer
Ten typ drzewa jest podany w zadaniu. Przypuszczalnie z zamiarem denerwowania wiecznie żywego piekła uczniów. – nitowa