http://code.msdn.microsoft.com/F-Samples-101-0576cb9f/sourcecode?fileId=18956&pathId=1045958806

// F# 教程文件
//
// 此文件包含代码示例来引导您了解
// F# 语言的基元。
//
// 在 http://fsharp.net 网站上了解有关 F# 的更多信息
//
// 有关更大的 F# 示例集合,请参见:
// http://go.microsoft.com/fwlink/?LinkID=124614
//
// 内容:
// - 简单计算
// - 针对整数的函数
// - 元组
// - 布尔值
// - 字符串
// - 列表
// - 数组
// - 更多集合
// - 函数
// - 类型: 联合
// - 类型: 记录
// - 类型: 类
// - 类型: 接口
// - 类型: 带有接口实现的类
// - 输出 // 打开某些标准命名空间
open System // 简单计算
// ---------------------------------------------------------------
// 此处是一些简单的计算。请注意可以如何通过“///”注释来
// 说明代码。将鼠标指针悬停在任何变量引用的上面,
// 可查看相关文档。 /// 一个非常简单的整数常量
let int1 = /// 另一个非常简单的整数常量
let int2 = /// 将两个整数相加
let int3 = int1 + int2 // 针对整数的函数
// --------------------------------------------------------------- /// 一个针对整数的函数
let f x = *x*x - *x + /// 简单计算的结果
let result = f (int3 + ) /// 另一个针对整数的函数
let increment x = x + /// 计算一个整数的阶乘
let rec factorial n = if n= then else n * factorial (n-) /// 计算两个整数的最大公因数
let rec hcf a b = // 注意: 两个参数之间由空格分隔
if a= then b
elif a<b then hcf a (b-a) // 注意: 两个参数之间由空格分隔
else hcf (a-b) b
// 注意: 函数参数通常是由空格分隔的
// 注意:“let rec”定义一个递归函数 // 元组
// --------------------------------------------------------------- // 一个包含整数的简单元组
let pointA = (, , ) // 一个包含整数、字符串和双精度浮点数的简单元组
let dataB = (, "fred", 3.1415) /// 一个用于交换两个值在元组中的顺序的函数
let Swap (a, b) = (b, a) // 布尔值
// --------------------------------------------------------------- /// 一个简单的布尔值
let boolean1 = true /// 另一个简单的布尔值
let boolean2 = false /// 使用 AND、OR 和 NOT 计算一个新布尔值
let boolean3 = not boolean1 && (boolean2 || false) // 字符串
// --------------------------------------------------------------- /// 一个简单字符串
let stringA = "Hello" /// 另一个简单字符串
let stringB = "world" /// 使用字符串串联计算的“Hello world”
let stringC = stringA + " " + stringB /// 使用 .NET 库函数计算的“Hello world”
let stringD = String.Join(" ",[| stringA; stringB |])
// 尝试重新键入上面的行以查看 Intellisense 是如何起作用的
// 注意,针对(部分)标识符按 Ctrl-J 时将重新激活它 // 功能列表
// --------------------------------------------------------------- /// 空列表
let listA = [ ] /// 包含 3 个整数的列表
let listB = [ ; ; ] /// 包含 3 个整数的列表,注意,:: 是“cons”运算
let listC = :: [; ] /// 使用递归函数计算一个整数列表的总和
let rec SumList xs =
match xs with
| [] ->
| y::ys -> y + SumList ys /// 列表的总和
let listD = SumList [; ; ] /// 介于 1 和 10 之间的整数(含 1 和 10)的列表
let oneToTen = [..] /// 前 10 个整数的平方
let squaresOfOneToTen = [ for x in .. -> x*x ] // 可变数组
// --------------------------------------------------------------- /// 创建一个数组
let arr = Array.create "hello"
arr.[] <- "world"
arr.[] <- "don" /// 通过对数组对象使用实例方法计算数组的长度
let arrLength = arr.Length // 使用切片表示法提取子数组
let front = arr.[..] // 更多集合
// --------------------------------------------------------------- /// 一个包含整数键和字符串值的字典
let lookupTable = dict [ (, "One"); (, "Two") ] let oneString = lookupTable.[] // 有关其他一些常见的数据结构,请参见:
// System.Collections.Generic
// Microsoft.FSharp.Collections
// Microsoft.FSharp.Collections.Seq
// Microsoft.FSharp.Collections.Set
// Microsoft.FSharp.Collections.Map // 函数
// --------------------------------------------------------------- /// 一个对其输入求平方的函数
let Square x = x*x // 跨值列表映射函数
let squares1 = List.map Square [; ; ; ]
let squares2 = List.map (fun x -> x*x) [; ; ; ] // 管线
let squares3 = [; ; ; ] |> List.map (fun x -> x*x)
let SumOfSquaresUpTo n =
[..n]
|> List.map Square
|> List.sum // 类型: 联合
// --------------------------------------------------------------- type Expr =
| Num of int
| Add of Expr * Expr
| Mul of Expr * Expr
| Var of string let rec Evaluate (env:Map<string,int>) exp =
match exp with
| Num n -> n
| Add (x,y) -> Evaluate env x + Evaluate env y
| Mul (x,y) -> Evaluate env x * Evaluate env y
| Var id -> env.[id] let envA = Map.ofList [ "a", ;
"b", ;
"c", ] let expT1 = Add(Var "a",Mul(Num ,Var "b"))
let resT1 = Evaluate envA expT1 // 类型: 记录
// --------------------------------------------------------------- type Card = { Name : string;
Phone : string;
Ok : bool } let cardA = { Name = "Alf" ; Phone = "(206) 555-0157" ; Ok = false }
let cardB = { cardA with Phone = "(206) 555-0112"; Ok = true }
let ShowCard c =
c.Name + " Phone: " + c.Phone + (if not c.Ok then " (unchecked)" else "") // 类型: 类
// --------------------------------------------------------------- /// 二维矢量
type Vector2D(dx:float, dy:float) =
// 预先计算的矢量长度
let length = sqrt(dx*dx + dy*dy)
/// 沿 X 轴的位移
member v.DX = dx
/// 沿 Y 轴的位移
member v.DY = dy
/// 矢量的长度
member v.Length = length
// 按某个常量重新缩放矢量
member v.Scale(k) = Vector2D(k*dx, k*dy) // 类型: 接口
// --------------------------------------------------------------- type IPeekPoke =
abstract Peek: unit -> int
abstract Poke: int -> unit // 类型: 带有接口实现的类
// --------------------------------------------------------------- /// 一个用于计算其被发送的次数的小组件
type Widget(initialState:int) =
/// 该小组件的内部状态
let mutable state = initialState // 实现 IPeekPoke 接口
interface IPeekPoke with
member x.Poke(n) = state <- state + n
member x.Peek() = state /// 是否已发送该小组件?
member x.HasBeenPoked = (state <> ) let widget = Widget() :> IPeekPoke widget.Poke()
let peekResult = widget.Peek() // 输出
// --------------------------------------------------------------- // 输出一个整数
printfn "peekResult = %d" peekResult // 对一般输出使用 %A 来输出结果
printfn "listC = %A" listC

[转]F# Samples 101 - Visual Studio 2010的更多相关文章

  1. VS:101 Visual Studio 2010 Tips

    101 Visual Studio 2010 Tips Tip #1        How to not accidentally copy a blank line TO – Text Editor ...

  2. [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一)

    [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一) Date  周二 06 一月 2015 By 钟谢伟 Tags mvc4 / asp.net 示 ...

  3. WIN7环境下CUDA7.5的安装、配置和测试(Visual Studio 2010)

    以下基于"WIN7(64位)+Visual Studio 2010+CUDA7.5". 系统:WIN7,64位 开发平台:Visual Studio 2010 显卡:NVIDIA ...

  4. Visual Studio 2010配置Opencv2.4.9

    转自: http://blog.csdn.net/huang9012/article/details/21811129 这篇文章作为OpenCV的启程篇,自然少不了先系统地介绍OpenCV开发环境的配 ...

  5. Win7 32bit + Matlab2013b +Visual Studio 2010联合编程配置

    要建立独立运行的C应用程序,系统中需要安装Matlab.Matlab编译器.C/C++编译器以及Matlab C/C++数学库函数和图形库函数. Matlab编译器使用mbuild命令可以直接将C/C ...

  6. 【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)

    Lab 1: 应用程序建模 实验目标 这个实验的目的是展示如何在Visual Studio 2010旗舰版中进行应用程序建模.团队中的架构师会通过建模确定应用程序是否满足客户的需求. 你可以创建不同级 ...

  7. visual studio 2010 破解版 破解方法

    1.Microsoft Visual Studio 2010下载(均来自微软官网) 高级版(Premium) [建议下载]       http://download.microsoft.com/do ...

  8. 《转》Visual Studio 2010 终极定制安装精简方法

    打开VS2010安装目录下的 Setup 文件夹,找到 baseline.dat 文件和 vs_setup.pdi 文件还有一个 locdata.ini 文件,是对应的. 这些都是文本文件,用记事本就 ...

  9. Visual Studio 2010 快捷键

    Visual Studio 2010 快捷键: CTRL + SHIFT + B 生成解决方案CTRL + F7 生成编译CTRL + O 打开文件CTRL + SHIFT + O 打开项目CTRL ...

随机推荐

  1. nyoj473 A^B Problem (高速幂)

    题目473 题目信息 执行结果 pid=473" style="text-decoration:none; color:rgb(55,119,188)">本题排行 ...

  2. 《The Swift Programming Language》的笔记-第28页

    页 本页里的主要内容是: 1 介绍swift语言里的各类数制,或者说某一整数的不同表示形式. 1)十进制,无前缀 的序列 3)八进制,以0o开头.后边是若干0~7的序列 进制,以0x开头.后是0~9. ...

  3. DDM的成熟在一个细微之处的体现

    前言 我们都知道DDM是华为云的非常优秀的分布式数据库中间件,在性能.易用性等方面在业界是遥遥领先的.他的成熟不仅仅体现在具有快速水平平滑扩容,支持多种分布式事物类型等等这些高大上的特性上,也体现在D ...

  4. LruCache & DiskLruCache

    在用户界面(UI)加载一张图片时很简单,然而,如果你需要加载多张较大的图像,事情就会变得更加复杂,.在许多情况下(如与像的ListView GridView或ViewPager的组件),屏幕上的图片的 ...

  5. 配置server禁止全部非法域名 訪问自己的server

    1.Apache2.4.1曾经: 第一种 直接拒绝訪问 打开 httpd.conf  文件,将一下配置追加到文件最后. #直接拒绝全部非法域名 <VirtualHost *:80> Ser ...

  6. NHibernate直接执行SQL进行插入

    有时候,需要用NHibernate直接执行SQL进行数据insert或update. 怎么写呢?简单一点的,可以直接拼凑出来的SQL,这样写: using NHibernate; StringBuil ...

  7. CodeChef - CHEFPRAD Chef and Pairs 树形DP

     题意 给你一棵由 N 个节点构成的树 T.节点按照 1 到 N 编号,每个节点要么是白色,要么是黑色.有 Q 组询问,每组询问形如 (s, b).你需要检查是否存在一个连通子图,其大小恰好是 s,并 ...

  8. MySql安装与使用图文教程

      2.下载完成后将其解压到你想要安装的路径下,例如我的解压到D:\MySql\mysql-5.7.12-winx64\路径下,刚解压完应该是下图这些文件夹:最好解压到根目录. 5.新建一个my.in ...

  9. Lightoj 1007 - Mathematically Hard

    1007 - Mathematically Hard    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 6 ...

  10. HDU1114 Piggy-Bank —— DP 完全背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1114 Piggy-Bank Time Limit: 2000/1000 MS (Java/ ...