2015-06-21 15 views
6

Uczę się Erlanga od Learn You Some Erlang i widziałem już dwukrotnie wzór [_|_], ale nie mogłem znaleźć żadnych informacji na jego temat. Takie użycie wydaje się zbędne, ponieważ pominięcie go z (1) i zastąpienie przez _w (2) daje taki sam wynik bez pogarszania czytelności. To mój pierwszy tydzień z Erlangiem, więc mogę się całkowicie mylić.Czy wzorzec [_ | _] w Erlang oznacza coś konkretnego?

(1) z bestest_qsort:

bestest_qsort(L=[_|_]) -> 
    bestest_qsort(L, []). 

(2) z here:

error:{badmatch,[_|_]} -> ok 

Odpowiedz

11

Wzór [p1 | p2] odpowiada niepusty liście, którego głowica odpowiada wzór p1 i którego wyniki ogon wzór p2. Ponieważ wzór _ pasuje do czegokolwiek, [_ | _] pasuje do każdej niepustej listy.

_ sam z siebie pasuje do wszystkiego, łącznie z pustą listą.

+5

@toraritte Wypróbuj 'F ([2,3])'. Wzór '[p]' pasuje do listy zawierającej dokładnie jeden element, który pasuje do 'p'. Nie pasuje do list z więcej niż jednym elementem (inaczej, powiedzmy, "[1,2]" pasowałoby do wzorca '[1]', co nie ma sensu - '[1] = [1,2]' powinno wyraźnie nie pasuje). – sepp2k