Witam Haskellers i Haskellettes,Haskell - zagnieżdżone pustych list
podczas czytania http://learnyouahaskell.com/ mój przyjaciel wpadł na pewien problem:
jest to możliwe w Haskell napisać rekurencyjną funkcję, która daje True jeśli wszystkie sub -sub -_- podlisty są puste. Moje pierwsze przypuszczenie było - powinno być - ale mam duży problem po prostu przy pisaniu adnotacji typu.
próbował coś podobnego
nullRec l = if null l
then True
else if [] `elem` l
then nullRec (head [l]) && nullRec (tail l)
else False
jest - nie działa - :-)
wymyśliłem coś jak
- składanym z concat - aby uzyskać aa pojedynczą długą listę
(daje mi problemy z implementacją) - lub tworzenie nieskończonej, treelopodowej postaci danych - i czyni to z listy
(jeszcze nie zaimplementowane)
ale ten brzmi trochę jak overkill dla tego problemu. co jest Twoje pomysły - na słoneczną niedzielę like this ;-)
Dzięki z góry
jako reakcja na wszystkich komentarzy - to jest zły styl bym chciał dodać to po prostu eksperyment !
NIE próbuj tego w domu! ;-)
Zastanów się, jaki powinien być typ takiej funkcji (jeśli ją wdrożysz na zwykłych listach)! – yatima2975
myślałem o tym - powinno to być nieskończone [[... [a] ...]], ale nie da się tego zapisać w haskell - dlatego wymyśliłem drugie podejście. Ale czy jest łatwiejszy sposób na zrobienie tego. Dodatkowo mój mózg jest nieco powolny, ponieważ dzisiaj jestem chory. – epsilonhalbe
Chory, czy nie, jesteś na dobrej drodze! Łatwo jest napisać rodzinę funkcji 'nullRec2 :: [[a]] -> Bool',' nullRec3 :: [[[a]]] -> Bool' i tak dalej (spróbuj parę!), Ale ty nie można łatwo dopasować do podpisu jednego typu. Potrzebny jest typ drzewa, taki jak "drzewo danych a = gałąź [drzewo a] | Węzeł a' lub może jest coś możliwego z typeclasses (jeszcze nie myślałem o tym podejściu). – yatima2975