- Home
- Products
- Integration
- Tutorial
- Barcode FAQ
- Purchase
- Company
Iterating with Aggregate Operators in Font
Iterating with Aggregate Operators PDF 417 Generation In None Using Barcode creation for Font Control to generate, create PDF-417 2d barcode image in Font applications. www.OnBarcode.comEncode Barcode In None Using Barcode creator for Font Control to generate, create Barcode image in Font applications. www.OnBarcode.comIt is common to use data to drive control, and indeed in functional programming the distinction between data and control is often blurred: function values can be used as data, and data can influence control flow. One example is using a function such as List.iter to iterate over a list. Let s take a simple example: let sites = [ "http://www.live.com"; "http://www.google.com"; "http://search.yahoo.com" ] sites |> List.iter (fun site -> printfn "%s, length = %d" site (http site).Length) List.iter simply calls the given function (here an anonymous function) for each element in the input list. Here is its type: Code39 Creator In None Using Barcode generation for Font Control to generate, create Code 3/9 image in Font applications. www.OnBarcode.comECC200 Drawer In None Using Barcode printer for Font Control to generate, create ECC200 image in Font applications. www.OnBarcode.comval iter: ('a -> unit) -> 'a list -> unit
Paint QR-Code In None Using Barcode printer for Font Control to generate, create QR Code JIS X 0510 image in Font applications. www.OnBarcode.comGenerate UPCA In None Using Barcode printer for Font Control to generate, create Universal Product Code version A image in Font applications. www.OnBarcode.comMany additional aggregate iteration techniques are defined in the F# and .NET libraries, particularly by using values of type seq<type>, discussed in Getting Started with Sequences later in this chapter. Painting Barcode In None Using Barcode maker for Font Control to generate, create Barcode image in Font applications. www.OnBarcode.comPrinting ANSI/AIM I-2/5 In None Using Barcode creator for Font Control to generate, create 2 of 5 Interleaved image in Font applications. www.OnBarcode.comAbstracting Control with Functions
PDF 417 Maker In Java Using Barcode printer for Java Control to generate, create PDF-417 2d barcode image in Java applications. www.OnBarcode.comMaking PDF417 In C# Using Barcode creation for .NET framework Control to generate, create PDF 417 image in .NET applications. www.OnBarcode.comAs a second example of how you can abstract control using functions, let s consider the common pattern of timing the execution of an operation (measured in wall-clock time). First let s explore how to use System.DateTime.Now to get the wall-clock time: Matrix Generation In Visual C# Using Barcode creator for Visual Studio .NET Control to generate, create 2D Barcode image in .NET applications. www.OnBarcode.comData Matrix 2d Barcode Generation In Objective-C Using Barcode printer for iPhone Control to generate, create Data Matrix ECC200 image in iPhone applications. www.OnBarcode.comCH APT ER 3 I NTRO D UCI NG F UNC TI O NAL PRO GRA MMI NG
Barcode Generation In None Using Barcode maker for Word Control to generate, create Barcode image in Office Word applications. www.OnBarcode.comBarcode Reader In VB.NET Using Barcode Control SDK for VS .NET Control to generate, create, read, scan barcode image in .NET framework applications. www.OnBarcode.com> open System;; > let start = DateTime.Now;; val start : DateTime > http "http://www.newscientist.com";; val it : string = "<html>...</html>" > let finish = DateTime.Now;; val finish : DateTime > let elapsed = finish - start;; val elapsed : TimeSpan > elapsed;; val it : TimeSpan = 00:00:01.9799671 Note the type TimeSpan has been inferred from the use of the overloaded operator in the expression finish - start. We discuss overloaded operators in depth in 6. You can now wrap up this technique as a function time that acts as a new control operator: open System let time f = let start = DateTime.Now let res = f() let finish = DateTime.Now (res, finish - start) This function runs the input function f but takes the time on either side of the call. It then returns both the result of the function and the elapsed time. The inferred type is as follows: Reading UPC Code In Java Using Barcode recognizer for Java Control to read, scan read, scan image in Java applications. www.OnBarcode.comQR Printer In Objective-C Using Barcode maker for iPhone Control to generate, create QR Code ISO/IEC18004 image in iPhone applications. www.OnBarcode.comval time : (unit -> 'a) -> 'a * TimeSpan
Read EAN-13 Supplement 5 In Java Using Barcode decoder for Java Control to read, scan read, scan image in Java applications. www.OnBarcode.comLinear Generation In .NET Using Barcode generation for ASP.NET Control to generate, create 1D image in ASP.NET applications. www.OnBarcode.comHere 'a is a type variable that stands for any type, and thus the function can be used to time functions that return any kind of result. Note that F# has automatically inferred a generic type for the function, a technique called automatic generalization that lies at the heart of F# programming. We discuss automatic generalization in detail in 5. Here is an example of using the time function, which again reuses the http function defined in 2: > time (fun () -> http "http://www.newscientist.com");; val it : string * TimeSpan = ... (The HTML text and time will be shown here) Matrix Encoder In Visual Basic .NET Using Barcode drawer for .NET Control to generate, create 2D image in VS .NET applications. www.OnBarcode.comPaint Barcode In Visual Basic .NET Using Barcode generator for Visual Studio .NET Control to generate, create Barcode image in .NET framework applications. www.OnBarcode.comUsing .NET Methods As First-Class Functions
You can use existing .NET methods as first-class functions. For example: C HAPTE R 3 INTRODU CING FUNCTION AL PROGRAM MIN G
> open System.IO;; > [@"C:\Program Files"; @"C:\Windows"] |> List.map Directory.GetDirectories;; val it : string [] list = [ [|"C:\\Program Files\\Adobe"; "C:\\Program Files\\Apoint"; "C:\\Program Files\\CA"; "C:\\Program Files\\CE Remote Tools"; ...]; ... ] Sometimes you will need to add extra type information to indicate which overload of the method is required. We discuss method overloading in more detail in 6. For example, the following causes an error: > open System;; > let f = Console.WriteLine;; C:\misc\test.ml(11,8): error: FS0041: The method WriteLine is overloaded. Possible matches are shown below. Resolve the overloading by adding further type annotations to the arguments. Possible overload: 'Console.WriteLine(bool value) : unit'. Possible overload: 'Console.WriteLine(char value) : unit'. ... However, the following succeeds: > let f = (Console.WriteLine : string -> unit);; val f : string -> unit Getting Started with Pattern Matching
One important tool in F# programming is pattern matching, a general construct that combines decomposition and control. In the previous sections, you got a taste of how you can use pattern matching with tuple, list, and option values. However, you can also use pattern matching in many other situations. You ll see many other examples of pattern matching in this book, but let s start with some simple pattern matching over strings and integers. As you ve already seen, pattern matches on explicit values are introduced using the match ... with ... construct: let urlFilter url agent = match (url,agent) with | "http://www.control.org", 99 -> true | "http://www.kaos.org" , _ -> false | _, 86 -> true | _ -> false
|
|