2009-07-14 12 views
11

Spojrzałem na różne zasoby Haskell w Internecie, przed zakupem książki, Real World Haskell. W innych wypadkach nie wydaje się, aby zawierało ono jakiekolwiek informacje na temat listy, które widziałem na różnych stronach internetowych, na które patrzyłem. Czy to możliwe, ponieważ z jakiegoś powodu są one ogólnie nieużywane w dobrze napisanym Haskell, czy jest to coś bardziej złożonego? Na przykład dziwnie wyglądająca składnia mogłaby być po prostu połączeniem operatorów, których jeszcze nie widziałem.Czy rozumienie list jest główną częścią Haskell?

+0

Pojęcia dotyczące list są omówione (krótko) w rozdziale 12 książki online: http://book.realworldhaskell.org/read/barcode-recognition.html#x_iF1 – mipadi

Odpowiedz

22

Wymienione listy są krótko wymienione w pozycji Chapter 12.

Używam kombinacji map i filtrów znacznie częściej niż ze zrozumieniem list w Haskell, ale w Pythonie częściej korzystałbym ze spisu. Więc myślę, że częścią tego jest osobisty styl.

Gdy zrozumiesz, jak korzystać z każdej części listy, co więcej możesz się uczyć w zakresie rozumienia list? Masz swoje dane wejściowe, twoje warunki/strażników i twoje aplikacje funkcyjne dla zwróconej listy. Naprawdę nie widzę uzasadnionej potrzeby dużej części ze zrozumieniem list w książce.

+1

Zgadzam się, rzadko się tym zajmuję z cukrem zrozumiałym listę . – jrockway

+4

+1) Zrozumiałe listy to po prostu cukier ... Chociaż mogły być naprawdę fajne, gdyby zostały zdefiniowane dla każdego 'MonadPlus', a nie tylko [...];) – Dario

+4

@Dario - pytaj, a otrzymasz : http://hackage.haskell.org/trac/ghc/wiki/MonadComprehensions –

5

Wymienione listy to cukier syntaktyczny do wiązania (jak w przypadku monady).

Inny cukier składniowy do tego jest do-notacji. Imho jest ładniejszy, a dużym plusem jest to, że działa na wszystkie monady.

Jeśli lista nie istniała, uważam, że byłoby mniej rzeczy do nauczenia się i nic nie zginęło (zamiast tego można użyć do-notacji).

Argumentem przemawiającym za zrozumieniem listy jest to, że uświadomi użytkownikowi, że jest to lista. Imho sygnatura typu będzie lepiej do tego pasowała.

14

Haskell definiowany jest przez mały zestaw funkcji języka podstawowego otoczony bogatym zestawem wyborów składniowych. Pojęcia dotyczące list są jednym z możliwych wyborów, ale nie zapewniają niczego, czego nie zapewnia również monadryl, który RWH wyda całej książce budującej intuicję. Istnieje wiele przypadków, w których Haskell zapewnia dwie składnie tego samego, pozwalając, gdzie, w stylu programowania opartego na argumentach i kombinatoryce oraz na zrozumieniu listy i monadracie.

Zrozumienia listowe zostały pierwotnie zaimplementowane jako zumiejętności monadyczne, co zmieniło się w "wielkiej rewolucji monomorficznej '98" (znanej też jako Haskell '98). W rzeczywistości projektowanie LINQ w językach .NET wywodzi się w dużym stopniu ze starszego projektu na temat zrozumienia monady. Wykazy listowe mogą być znacznie bardziej ogólne niż są, ale zostały celowo okaleczone, aby ułatwić im zrozumienie komunikatów o błędach.

Biorąc pod uwagę skończoną ilość papieru, musisz wybrać materiał do podkreślenia, a RWH unika omawiania ich w większej części, więc nie wpadasz w pułapkę myślenia o listach jako o czymś specjalnym.

To powiedziawszy, istnieje krótka wzmianka o nich w rozdziale 12. W tym momencie stworzono wystarczającą intuicję dla podstawowych pojęć, że tak naprawdę nie są one zagrożeniem.

Ostatecznie nazwą książki jest Real World Haskell. Chce cię nauczyć dobrych technik programowania na świecie. Wielu Haskelerów (nie wszyscy) unika interpretacji list, ponieważ notacja nie jest skalowalna, a ponieważ w końcu możesz chcieć powrócić i zmodernizować monadowy transformator lub coś takiego i skończy się przepisywanie całych fragmentów kodu zrozumiałego w monadycznym styl w każdym razie.

[Aktualizacja: teraz, gdy GHC odzyskał monad comprehensions, sprzeciw ten nie jest tak silny jak kiedyś. Możesz uzyskać z nich ciekawą nową funkcjonalność.]

7

Pojęcia dotyczące list pojawiają się głównie w małych przykładach przetwarzania list, z których wiele ma charakter jawnie matematyczny. Po rozpoczęciu korzystania z większych aplikacji, takich jak opisane w Real World Haskell, przetwarzanie list jest proporcjonalnie znacznie mniejszą częścią kodu. Jak już wspomniano, często wygodnie jest używać map, filter, fold, zip itd., Ponieważ używa się rozumienia list.

Więc

  • W świecie rzeczywistym programu Haskell, tylko niewielka część kodu przetwarza list.

  • Tylko niewielka część kodu Haskella przetwarzającego listę jest znacznie ładniejsza, gdy jest napisana ze zrozumieniem listy.

Prawie wszystkie wyliczenia spisane przeze mnie piszę, aby utworzyć listy par. Nie jestem jednak pewien, czy należy coś na ten temat odczytać.

Powiązane problemy