Post on 24-Feb-2016
description
An Introduction to F#
Sushant Bhatia
@aboutdevaboutdev.com
aboutdev@gmail.com
Why learn F#?
OverviewTour of F# in Visual Studio 2011
Fundamentals of F#
Functional Programming
Examples
F# in Visual Studio 2011DEMO
Fundamentals of F#
Signature Name Description Example
Unit Unit ()
int, float Concrete Type 10, 6.04
‘a, ‘b Generic Type
‘a -> ‘b Function Type fun x -> x + 1
‘a * ‘b Tuple Type Ordered collection of values
(1, 2), (“ten”, “soup”)
‘a list List Type List of values [1; 2; 3], [1 .. 3]
‘a option Option Type Optional value Some(3), None
Core Types
Default -> anonymous module
Nest Modules
Namespace
Modules & Namespaces
Pass results of first function to second
Benefit Chain functions togetherType inference
Pipe Forward
[1 .. 10] |> List.map (fun x -> x * x) |> List.iter (printfn "%i")
Series of rules that will execute if a pattern matches the input.
Switch on Steroids
Pattern Matching
Type
1 of a set of possible values
Used for complex data structures
Discriminated Unions
Functional Programming
What is Functional Programming?
A function is a rule that associates to each x from some set X of values, a unique y from another set Y of values. If f is the name of the function,
y = f ( x )
f : X → Y
Functional programming is a programming paradigm that treats computations as the evaluation of mathematical functions and avoids state and mutable data.
[Wikipedia]
All programs and procedures are functions and clearly distinguish incoming values from outgoing values
There are no variables or assignments – variables are replaced by parameters
There are no loops – replaced by recursive calls
The value of a function depends only on the value of its parameters and not on the order of evaluation or the execution path that led to the call
Functions are first-class values (viewed as values themselves, computed by other functions and can be parameters to functions)
[Programming Languages. Kenneth C Louden]
1. First Class Functions
2. Higher Order Functions
3. Pure Functions
4. Recursion / Tail Recursion
5. Currying
1. First Class Functions
a) Bind an identifier to a function definition
let sqr = fun n -> n * n
b) Store functions in data structures
let aTuple = (sqr, fun n -> n + n) let aList = [sqr, fun n -> n + n]
2. Higher Order Functions
a) Pass function as an argumentlet data = List.map (fun n -> n * n) [ 1; 2; 3; 4; ]
b) Return function as value of function
let sqrList = let funSqr = fun lst -> List.map (fun a -> a * a) lst funSqr
3. Pure Functions
a) No Side Effects / Referential transparency
b) Caching optimizations (memoization)
c) No Data Dependency = order of execution is independent and can be parallel (thread-safe)
4. Recursion / Tail Recursion
a) Iteration through recursive invocationlet rec factorial x = if x <= 1I then 1I else let recResult = factorial (x-1I) let result = x * recResult result
b) Tail recursion – Accumulatorslet factorialTail x = let rec tailRecFact x acc = if x <= 1I then acc else tailRecFact (x-1I) (acc * x) tailRecFact x 1I
5. Currying
let add x y = x + y
let addToTen = add 10
addToTen 5
Demo
1. Type Provider – Netflix
2. Units of Measure
3. Async / Parallel
Examples – Project Euler
How to Learn F#
1. Programming F# - Chris Smith2. Beginning F# - Robert Pickering3. Expert F# - Don Syme
4. http://blogs.msdn.com/b/dsyme5. http://en.wikibooks.org/wiki/Programming:F_Sharp6. http://projecteuler.net/ 7. http://fdatamining.blogspot.com/2009/12/f-online-
videos.html8. http://www.tryfsharp.org/Tutorials.aspx9. http://fssnip.net/
Giveaway / Raffle2 e-books