Scala -> łopatologiczne tłumaczenie kodu.

Scala -> łopatologiczne tłumaczenie kodu.
A7
  • Rejestracja:ponad 10 lat
  • Ostatnio:11 miesięcy
  • Postów:46
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 :)

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
A7
  • Rejestracja:ponad 10 lat
  • Ostatnio:11 miesięcy
  • Postów:46
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 ?

edytowany 1x, ostatnio: androl7
2

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

Shalom
Potwierdzam ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.