Lista w zrozumieniu – Wikipedia
Artykuł w Wikipedii, Free L’Encyclopéi.
W programowaniu komputerowym składnia niektórych języków programowania umożliwia zdefiniowanie Listy zrozumienia , to znaczy listy, których treść jest zdefiniowana przez filtrowanie treści innej listy zgodnie z zasadą podobną do definicji w zrozumieniu teorii zestawu. Ta syntaktyczna konstrukcja odróżnia się od najczęstszej konstrukcji w językach programowania, która ma zdefiniować listy poprzez wymienienie jej elementów.
Ta syntaktyczna konstrukcja oferuje zalety czytelności i zwięzłości i jest zbliżona do oceny stosowanej w matematyce:
Pierwszym językiem programowania, który oferuje definicje według zrozumienia, jest ustawiony.
Pierwsze odniesienie do definicji według zrozumienia zastosowanego do list jest spowodowane przez Rod Burstall i Johna Darlingtona w opisie ich języka programowania NPL (W) W 1977 roku.
W formalnym systemie obliczeń aksjomat konstrukcja tego samego rodzaju zarządza przepływami (lub strumieniami), które można postrzegać jako listy nieskończoności.Zrozumienie zostało zaproponowane jako notacja żądania bazy danych [[[ Pierwszy ] i zostały ustanowione w języku zapytania bazy danych Kleisli [[[ 2 ] .
W języku programowania Haskell, zrozumienie list są wyrażeniami, które mogą zawierać funkcje wyższego rzędu
mapa
Ifiltr
.Na przykład :
S = filtr ( X -> X ^ 2 > 3 ) [[[ 0 .. ] - Lub S = [[[ X |. X <- [[[ 0 .. ],], X ^ 2 > 3 ]
W tym języku składnia zrozumienia listy używa się po pionowym pasku
|.
Seria kwalifikacje .
Kwalifikacje ma dwie części:- I generator który wyodrębnia elementy z listy;
- A Garde który filtruje wyodrębnione elementy.
Język programowania Pythona oferuje również składnię do wyrażenia zrozumienia listy [[[ 3 ] , więc poprzedni przykład jest wyrażany w prawie równoważny sposób:
# Z powodu ścisłej oceny (to znaczy nie leniwy), # Listy Python muszą się skończyć, # Na przykład lista od 0 do 99: L = zakres ( 100 ) S = [[[ X Do X W L Jeśli X ** 2 > 3 ]
Ponieważ lista jest konkretną monadą, naturalne jest uogólnienie zrozumienia na dowolną monadę, co robi Haskell.
Rozszerzenie kompilatora Glasgow Haskell jest Lista równoległa listy (nazywane również Zrozumienie zip ).
Umożliwia kilka niezależnych oddziałów kwalifikatorów.
Gdzie kwalifikatory oddzielone przecinkami są zależne, gałęzie oddzielone prętami ”| Są oceniane równolegle.
Najpierw rozważmy zrozumienie listy z konwencjonalnymi kwalifikatorami zależnymi:- [(x, y) | x <- a, y <- b]
Powstała lista będzie zawierać pary, złożone z listów A I B . Dla każdego elementu A , element B jest z kolei używany do uzyskania wszystkich możliwych kombinacji A i B (produkt kartezjański).
Teraz rozważmy zrozumienie listy z różnymi kwalifikatorami dostarczonymi przez rozszerzenie:
- [(x, y) | x <- a | y <- b]
Różnica polega na tym, że wynikowa lista nie będzie zawierała wszystkich kombinacji. Zamiast tego pierwsza gałąź wytwarza element z A i druga gałąź z B . Rezultatem jest następnie seria par złożonych z połowy A i pół B , jakby dwie listy A I B został zestawiony.
Biorąc pod uwagę przepisanie funkcji wyższego rzędu, dodaje równoległe zrozumienie Zipwith Do mapa I filtr poprzedni.
Przykład równoległego zrozumienia można po prostu przepisać w następujący sposób: [Wymagana precyzja]- Zipwith (,) A B
W ogólnym przypadku każda gałąź równoległa może zostać przepisana w oddzielnym zrozumieniu listy. Wynik jest zapinany na listę
wyrównane, a inne rozumienie listy przekształcają je w listę wyników. [Wymagana precyzja]Powiązane artykuły [[[ modyfikator |. Modyfikator i kod ]
Linki zewnętrzne [[[ modyfikator |. Modyfikator i kod ]
- Phil Trinder « Zrozumienie, notacja zapytania dla DBPLS », Postępowanie DBPL3 trzeciego międzynarodowego warsztatu na temat języków programowania bazy danych W W P. 55–68 ( Czytaj online )
- Limsoon Ludzie « Funkcjonalne odwagi systemu zapytań Kleisli », Materiały z piątej międzynarodowej konferencji ACM SIGPLAN na temat programów funkcjonalnych W ( Czytaj online )
- „Zrozumienie listy Python, nowoczesna składnia dla map () i Filter ()” , Blog Florent Gallaire, 5 grudnia 2011 r.
Haskell:
Pyton:
Common Lisp
Aksjomat:
Recent Comments