Fajna rzecz w językach takich jak Haskell (jest bardzo podobny w F #, ale nie znam dokładnej składni - to powinno pomóc ci zrozumieć ->, chociaż) jest to, że możesz zastosować tylko części argumentu , aby utworzyć curried funkcje:
adder n x y = n + x + y
innymi słowy: "daj mi trzy rzeczy, i dodam je razem". Podczas rzucania liczbami, kompilator wywnioskuje typy n x i y.Załóżmy, że piszesz:
adder 1 2 3
Typ 1, 2 i 3 to liczba wewnętrzna. Dlatego:
adder :: Int -> Int -> Int -> Int
Oznacza to, że dał mi trzy liczby całkowite, i stanę liczbę całkowitą, ewentualnie, czy samo jak powiedzenie:
five :: Int
five = 5
Ale tu jest ładny część! Wypróbuj to:
add5 = adder 5
Pamiętaj, że sumator przyjmuje int, int, int i daje z powrotem int. Jednak to nie jest cała prawda, jak się wkrótce przekonacie. W rzeczywistości, add5 będzie miał tego typu:
add5 :: Int -> Int -> Int
Będzie tak, jeśli „odkleić” od liczb całkowitych (lewy-większość) i przyklejona bezpośrednio do funkcji. Patrząc bliżej na podpis funkcji, możemy zauważyć, że -> rację-asocjacyjne, tj:
addder :: Int -> (Int -> (Int -> Int))
ten powinien uczynić to całkiem jasne: gdy dajesz Adder najbliższej liczby całkowitej, to będzie ocenić na wszystko co do prawo od pierwszej strzałki, lub:
add5andtwomore :: Int -> (Int -> Int)
add5andtwomore = adder 5
Teraz możesz użyć add5andtwomore zamiast "adder 5". W ten sposób, można zastosować inną liczbę całkowitą, aby uzyskać (powiedzmy) „add5and7andonemore”:
add5and7andonemore :: Int -> Int
add5and7andonemore = adder 5 7
Jak widać, add5and7andonemore chce dokładnie kolejny argument, a kiedy dać mu jedną, to nagle staje się liczbą całkowitą!
> add5and7andonemore 9
=> ((add5andtwomore) 7) 9
=> ((adder 5) 7) 9)
<=> adder 5 7 9
Podstawiając parametry do sumatora (nxy) do (5 7 9), otrzymujemy:
> adder 5 7 9 = 5 + 7 + 9
=> 5 + 7 + 9
=> 21
W rzeczywistości, plusem jest też po prostu funkcja, która trwa int i daje wróć do innej strony, więc powyższe jest bardziej podobne:
> 5 + 7 + 9
=> (+ 5 (+ 7 9))
=> (+ 5 16)
=> 21
Proszę!
To wszystko wydaje mi się również greckie. – Brettski
Nazwij go po prostu Matuzalem. –
W rzeczywistości Matuzalem żył przez 969 lat, więc nadal byłbym jedną trzecią jego wieku. Jednak edytowane dziękuję;) – AnthonyWJones