> LeekScript samouczek
*Ta strona jest częściowo przestarzała. W Leekscript curry służy tylko do zwiększenia czytelności kodu, nie zapisuje już operacji, ponieważ koszt wywołania funkcji jest zredukowany do 1 niezależnie od liczby parametrów. *
W programowaniu funkcjonalnym currying odnosi się do operacji, która przenosi funkcję wieloargumentową do funkcji jednoargumentowej i zwraca funkcję, która przyjmuje pozostałe argumenty. Operacja odwrotna jest oczywiście możliwa i nazywana jest dekurryfikacją.
Termin pochodzi od nazwiska amerykańskiego matematyka Haskella Curry'ego.
Weźmy funkcję, która przyjmuje 2 argumenty i zwraca ich sumę:
funkcja dodaj(x, y) { zwróć x+y; }
Zamienia się w metodę curry
funkcja add_curried(x) { funkcja powrotu (y) { zwróć x+y; }; }
Przykład użycia
//Klasyczna metoda zmienna suma = dodaj(1, 3);
//Metoda curry var add1 = add_curried(1); var suma = dodaj1(3);
Ten przykład ma po prostu pokazać, jak to działa, w tym przypadku nie ma sensu przechodzić przez curry. Zobaczmy inny, ciekawszy przykład. Wyobraź sobie, że mamy tablicę n elementów numerycznych i chcemy dodać 1 do wszystkich elementów.
//Klasyczna metoda for(klucz var: element var w tablicy) { tablica[klucz] = dodaj(1, element); }
//Metoda curry var add1 = add_curried(1); for(klucz var: element var w tablicy) { tablica[klucz] = dodaj1(element); }
Zaletą jest tutaj optymalizacja, w pętli zamiast wywoływać funkcję z 2 parametrami, wywołujemy tylko funkcję z jednym parametrem. Im większa liczba elementów w tablicy, tym większy zysk.
Jak widzieliśmy wcześniej, głównym zastosowaniem są funkcje wywoływane w pętlach, których jeden lub więcej parametrów nie zależy od pętli. Memoization to doskonały przykład użycia.
Weźmy na przykład naszą funkcję lineOfSight z zapamiętywaniem (zdefiniowaną tutaj):
Jeśli wywołamy tę funkcję w pętli, dwie operacje będą nas obciążać! Curryfikacja może nam pomóc:
Nasza funkcja zwraca inną funkcję, która może korzystać z parametrów pierwszej z nich. Za pierwszym razem jest to trochę trudne do zrozumienia, ale dobrze zastosowana ta metoda jest bardzo skuteczna! Małe ćwiczenie: możemy jeszcze bardziej zoptymalizować tę funkcję, od Ciebie zależy, jak to zrobić!
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.