Obecnie pracuję nad problemem programowania w moim osobistym czasie, który prosi o utworzenie funkcji javascript, która może nazywać się w ten sposób.Pisanie funkcji curried javascript, którą można nazwać dowolną liczbę razy, która zwraca wartość na ostatnim wywołaniu funkcji
add(1) // 1
add(1)(2) // 3
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15
Mam problem z wymyśleniem, jak sprawić, by zwracał wartość przy ostatnim połączeniu.
Na przykład, w celu add(1)(2)
do pracy, to add(1)
musi powrócić do funkcji, jednak zgodnie z instrukcjami add(1)
gdy wywołana przez sam wróci 1
.
Zakładam, że jednym ze sposobów rozwiązania tego problemu jest ustalenie, ile razy z rzędu jest wywoływana funkcja add
, ale nie mogę wymyślić, jak to osiągnąć. Czy ktoś ma jakieś wskazówki, które mogą wskazać mi właściwy kierunek?
Czytałem te dwa artykuły (1, 2) o funkcji curry i rozumiem je, ale nie jestem pewien, jak zrobić curry, gdy mamy do czynienia ze zmienną liczbą argumentów.
Więc co pan spróbować? Mnóstwo przykładów curry w sieci. zwrócisz funkcję ... – epascarello
@epascarello Przepraszam, jeśli nie wyjaśniłem. Przeczytałem ten http://www.crockford.com/javascript/www_svendtofte_com/code/curried_javascript/index.html i ten http://blog.carbonfive.com/2015/01/14/gettin-freaky-functional -wcurried-javascript /. Jeśli chodzi o moje próby, to tak się stało, że nie widzę wartości w ich publikowaniu. Nie mam też problemu z samostanowaniem. Mam problem z funkcją przyjmującą zmienną liczbę wywołań, zanim ostatecznie się rozwiąże. Nie wiem, jak to pomieścić. – m0meni
Btw, zamiast używać funkcji variadic, powinieneś rozwiązać odpowiednie problemy albo przy pomocy funkcji redukcji i binarnych operatorów, albo z funkcją "semi-variadic", w której argumenty variadic są przekazywane jako tablica. To znacznie lepiej pasuje do stylu funkcjonalnego. Funkcje Variadic stwarzają więcej problemów niż rozwiązują i należy ich unikać. – rand