200 likes | 314 Views
F#. Cody Coleman, Matt Davis, and Mel Green. History of F#. Started in 2002 Created by Don Syme , and backed by Microsoft Research Group. Sought to combine the power of typed functional programming with the strengths of .Net. Influenced By.
E N D
F# Cody Coleman, Matt Davis, and Mel Green
History of F# • Started in 2002 • Created by Don Syme, and backed by Microsoft Research Group. • Sought to combine the power of typed functional programming with the strengths of .Net
Influenced By • It’s predecessors include, OCaml, ML, Haskell, and .Net languages. • It’s considered OCaml for .Net. • F# has encapsulated and build upon many of OCaml’s strengths • Haskell influenced Sequence Expressions and Workflows. • F# inherited hundreds of important and major implementation stack libraries like LINQ.
Syntax • Shares syntax with ancestors: ML, Ocaml
Functions let recfib n = match n with | 1 | 2 -> 1 | _ -> fib(n-2) + fib(n-1) • Lambda fun x -> x + 1 • Currying let add x y = x + y
Piping let algorithm n = n |> (fun x -> x + 5) |> (fun x -> x * x) |> (fun x ->x.ToString()) let result = algorithm 3 result: “64”
Pattern Matching • Uses the matchvariablewithsyntax. • let recfactorial n = matchn with | 0 -> 1 | n -> n * factorial(n-1) • Very useful with user defined Types and Unions in functions typePayType = | Salary of float | Wage of int let eval x = match x with | Salary y ->printf"Makes %.2f Yearly\r\n" y | Wage z -> printf"Makes %d Yearly\r\n" (z*40*4*12)
Scope • An identifier is valid from after its definition until the end of the section it appears in • Top level identifiers therefore exist until the end of the program • Top level Identifiers cannot be redefined in their scope without a compile error • Identifier cannot be used in its own definition:let x = x + 1 • Nested inside a function, identifiers are valid from after their definition until the end of the containing function, and cannot be accessed outside of their containing function • When nested, identifier names can be reused. • Identifiers used this way will revert to their old values once out of scope
Scope • let f = let n = 3 //initial value of nlet n = n * 2 //n is rebound to 3*2let n = n * 7 //n is rebound to 6*7let n = (n, "The Answer to it all")//n is rebound to a tuple n //n is returned to caller of f
Binding • All bindings handled with the let keyword • Binds some name to some value regardless of value type • Uses pattern matching to assign to more then one identifier • let (a,b) = (1,2) • let mutable for assigning a value to an identifier instead of a bindging. • let mutable bob = 7bob <- 34 • <- signifies a value being pushed into the identifier
Interactive Scripting • Copy code from the IDE into the Console by pressing Alt+Enter • Advantage of having the IDE InteliSense and Syntax Highlighting. • Test blocks of code • Entering a commands in the Interactive Console requires a double semicolon • Advantage when making functions, types, or long lines of code over just the console.
Examples: Currying • Simple Curried Function the 2001 Space odyssey could have used to track it’s HAL 9000 Computer Automated System.
Examples: IsPrime • Simple yet effective • Takes a grand total of about 20 seconds
Examples: IsPrime(optimized) • The largest factor of a number is its square root. So we only need the numbers from 2 to sqrt n. • Takes only .20 seconds
Examples: The OptimusPrime • Who needs evens? 2 is the only even prime, so why test all the rest. Yield to the rescue. • This one takes a mind numbing, earth shattering .11 seconds.
Examples: SumOfSquares • Sum of Squares