Scala -> łopatologiczne tłumaczenie kodu.

0

Witam serdecznie
Mógłby mi ktoś wytłumaczyć w prostych słowach co się dzieje w tym kodzie. Chodzi mi przede wszystkim po wiersz 3. Co to jest h1, t1 i h2, t2 i co tam dokładnie się dzieje.
http://pastebin.com/3KTJi8NW
Pozdrawiam i z góry dziękuje :)

1

To h1::t1 to jest podzielenie listy na head i tail, tzn na pierwszy element i na resztę listy. W tym kodzie najpierw robisz krotkę złożoną z dwóch list a potem matchujesz tą krotkę do podanych wzorców.

  1. case (h1 :: t1, h2 :: t2) czyli obie listy można rozłożyć do postaci pierwszy element :: reszta listy. W takiej sytuacji zwracamy informacje czy pierwszy element listy 1 jest równy pierwszemu elementowi listy 2 i jednocześnie robimy AND z naszą funkcją wywołaną rekurencyjnie na ogonach tych list (czyli na listach bez pierwszych elementów)
  2. case (Nil, _) czyli pierwsza lista jest Nullem a druga lista czymkolwiek, wtedy zwracamy true
  3. case _ => false czyli dowolna inna sytuacja, wtedy zwracamy false

Wynika z tego że funkcja zwróci true wtedy i tylko wtedy gdy po kolei wszystkie kolejne elementy podanych list będą sobie równe i lista pierwsza jest co najwyżej tej samej długości co lista 2. Jeśli któreś z odpowiadających sobie elementów nie są równe to h1==h2 da false i tym samym cała funkcja zwróci false. Jeśli lista 1 będzie dłuższa niż lista2 to lista 2 może sie skończyć (wiec pattern pierwszy nie pasuje) i jednocześnie lista 1 jeszcze będzie miała elementy (odpada pattern drugi) i pattern trzeci zwróci false, wiec cała funkcja zwróci false.

0

Dziękuję za szybką odpowiedz. Mam pytanie jeszcze odnośnie tego kodu piasnego w Ocamlu http://pastebin.com/4CeGs1Xc . Szukałem informacji dlaczego tak jest, ale nie mogę znaleźć odpowiedzi. Rozumiem wszystko w tym kodzie, oprócz tego dlaczego po każdym znaku jest kropka i dlaczego to nie działa jak nie ma tych kropek ?

2

Bo w ocamlu nie ma przeładowywanie funkcji i te dla floatów są z kropką

1 użytkowników online, w tym zalogowanych: 0, gości: 1