Possible Duplicate:
Functional programming: currying
I’m reading the free F# Wikibook here:
http://en.wikibooks.org/wiki/F_Sharp_Programming
There’s a section explaining what Partial Functions are. It says that using F# you can partially use a function, but I just can’t understand what’s going on. Consider the following code snippet that is used an example:
#light
open System
let addTwoNumbers x y = x + y
let add5ToNumber = addTwoNumbers 5
Console.WriteLine(add5ToNumber 6)
The ouput is 11. But I’m not following. My function ‘add5ToNumber’ doesn’t ask for a paramter so why can I invoke it and give it it one?
I really like learning about F# these days, baby steps!
Basically, every function in F# has one parameter and returns one value. That value can be of type unit, designated by (), which is similar in concept to void in some other languages.
When you have a function that appears to have more than one parameter, F# treats it as several functions, each with one parameter, that are then “curried” to come up with the result you want. So, in your example, you have:
That is really two different functions. One takes
xand creates a new function that will add the value ofxto the value of the new function’s parameter. The new function takes the parameteryand returns an integer result.So,
addTwoNumbers 5 6would indeed return 11. But,addTwoNumbers 5is also syntactically valid and would return a function that adds 5 to its parameter. That is whyadd5ToNumber 6is valid.