Oglądam samouczek dotyczący analizatorów składni w haskell https://www.youtube.com/watch?v=9FGThag0Fqs. Wykład rozpoczyna się od zdefiniowania kilku naprawdę podstawowych analizatorów składni. Są one używane razem, aby później tworzyć bardziej skomplikowane parsery. Jednym z podstawowych parserów jest pozycja. Służy do wyodrębnienia znaku z analizowanego łańcucha.Dlaczego używać lambda zamiast dopasowywania wzorców?
Wszystkie Parsery mają następujący typ:
type Parser a = String -> [(a, String)]
Parser poz jest zdefiniowany następująco:
item :: Parser Char
item = \inp -> case inp of
[] -> []
(x:xs) -> [(x,xs)]
nie jestem tak przyzwyczajony do tej składni, tak to wygląda dla mnie dziwne . Ja napisałem go:
item' :: Parser Char
item' [] = []
item' (x:xs) = [(x,xs)]
Badanie to wskazuje, że w ghci są równe:
*Main> item ""
[]
*Main> item "abc"
[('a',"bc")]
*Main> item' ""
[]
*Main> item' "abc"
[('a',"bc")]
Wykładowca sprawia krótki komentarz na temat myślenia wygląda jaśniej, ale nie zgadzam się. Więc moje pytania są następujące:
Czy rzeczywiście są całkowicie identyczne? Dlaczego wersja lambda jest bardziej przejrzysta?
Powiedziałbym, że to kwestia gustu. – augustss