> LeekScript handledning
*Den här sidan är delvis föråldrad. I Leekscript används currying endast för att göra koden mer läsbar, det sparar inte längre operationer eftersom kostnaden för ett anrop till en funktion reduceras till 1 oavsett antalet parametrar. *
I funktionell programmering hänvisar currying till operationen som tar en multi-argument-funktion till en en-argument-funktion och returnerar en funktion som tar resten av argumenten. Den omvända operationen är uppenbarligen möjlig och kallas decurryfication.
Termen kommer från namnet på den amerikanske matematikern Haskell Curry.
Låt oss ta en funktion som tar 2 argument och returnerar summan av 2:
function add(x, y) { returnera x+y; }
Förvandlas till currymetod
function add_curried(x) { return function(y) { returnera x+y; }; }
Exempel på användning
//Klassisk metod var summa = add(1, 3);
//Currymetoden var add1 = add_curried(1); var summa = add1(3);
Det här exemplet är bara för att helt enkelt visa hur det fungerar, i det här fallet är det ingen mening med att currya. Låt oss se ett annat mer intressant exempel. Föreställ dig att vi har en matris med n numeriska element och vi vill lägga till 1 till alla element.
//Klassisk metod for(var key:var element i array) { array[nyckel] = add(1, element); }
//Currymetoden var add1 = add_curried(1); for(var key:var element i array) { array[nyckel] = add1(element); }
Fördelen här ses i termer av optimering, i slingan istället för att anropa en funktion med 2 parametrar anropar vi bara en funktion med en parameter. Ju större antal element i arrayen, desto större förstärkning.
Som vi har sett tidigare är den huvudsakliga användningen för funktioner som kallas i loopar och en eller flera av vars parametrar inte beror på loopen. Memoisering är ett perfekt exempel på användning.
Ta till exempel vår lineOfSight-funktion med memoization (definierad här):
Om vi kallar denna funktion i en loop, kommer de två operationerna att tynga oss! Currification kan hjälpa oss:
Vår funktion returnerar en annan funktion, som kan använda parametrarna för den första, det är lite svårt att förstå första gången, men väl använd är denna metod mycket effektiv! En liten övning: vi kan optimera den här funktionen ännu mer, det är upp till dig att ta reda på hur!
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.