Wiele przykładowego kodu Scala zawiera ciągi i kolekcje o nazwie "xs". Dlaczego xs?Dlaczego identyfikatory list i łańcuchów są oznaczone "xs" (w Scala i innych językach)?
Przykłady:
var xs = List(1,2,3)
val xs = "abc"
Wiele przykładowego kodu Scala zawiera ciągi i kolekcje o nazwie "xs". Dlaczego xs?Dlaczego identyfikatory list i łańcuchów są oznaczone "xs" (w Scala i innych językach)?
Przykłady:
var xs = List(1,2,3)
val xs = "abc"
Zasadniczo jest to konwencja nazewnictwa powstała w LISP-ie. Uzasadnieniem jest:
myślałem, że to xii;) –
@Paul - nie, to działa tylko wtedy, gdy masz dokładnie 12 xs –
Widziałem tę nazwę używaną do zmiennych lista funkcjonalnych tutoriale programowania, ale nie smyczki (z wyjątkiem, gdy ciąg jest traktowana jako lista znaków).
Jest to po prostu fikcyjna nazwa używana w przykładach. Możesz nazwać zmienną skalarną x
, a lista będzie xs
, ponieważ xs
jest liczbą mnogą z x
. W kodzie produkcyjnym lepiej mieć bardziej opisową nazwę.
Możesz również zobaczyć to w kodzie, który wzór pasuje do list. Na przykład (w SML):
let rec len l =
match l with
| [] -> 0
| x :: xs -> 1 + len xs
Bardziej opisowe parę nazwisk może być first :: rest
, ale jest to tylko przykład.
Mam tendencję do używania tej samej konwencji w produkcji, na przykład "zamówienie" i "zamówienia";) – bbozo
Pomijając fakt, że xs
jest pomyślany jako liczba mnoga od x jako @Ken Bloom zwraca uwagę, to również zauważyć, jak istotne dla języków takich jak struktury Scala List
. List
ma strukturę listy połączonej, w której kontener ma odniesienie do pierwszego elementu i do reszty listy.
Operator ::
(zwany cons) tworzy listę jak:
42 :: 69 :: 613 :: Nil
::
jeśli znajdują się w dostosowaniu wzorca rozpakowuje listę do pierwszego punktu, a reszta na liście Jako to:
List(42, 69, 613) match {
case x :: xs => x
case Nil => 0
}
Ponieważ ten wzór pojawia się wszędzie, ponownie aders może wywnioskować, że xs
oznacza "resztę listy".
Ja mentalnie wymawiam "xs" jako "nadmiar", jak w "reszcie". – nibot
pokrewne (ale prawdopodobnie nie jest duplikatem) http://stackoverflow.com/questions/1564758/does-functional-programming-mandate-new-naming-conventions –