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. Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡

     <Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡> 之前基于github上的第三方开源控件ViewPagerIndicator的UnderlinePa ...

  2. python 2.*和3.*的变化

    1.urllib2是python自带的模块,在python3.x中被改为urllib.request,如 <span style="font-size:12px;">u ...

  3. JavaScript基本类型与引用类型

    前面已经说过,JavaScript变量是松散类型,它可以保存任何类型的值.变量的值以及数据类型可以在脚本的生命周期内发生改变.变量包含两种不同类型的值:基本类型和引用类型.基本类型值的是简单的数据段, ...

  4. STL_算法_元素计数(count、count_if)

    C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) count . count_if #include<iostream> #include<cstdio&g ...

  5. easyUI的tree

    前端使用easyUI,放了一个tree,搞死了. easyUI的tree,后端传过来的数据,是json格式:然后easyUI向后端提交.请求时,会自动将节点的id附在url后面. 主要有两个注意的地方 ...

  6. brctl和虚拟网桥

    1 创建空的虚拟网桥 brctl addbr br0 这个时候可以认为该虚拟网桥有多个虚拟接口,但是没有实际的网卡接口和该虚拟网桥相连的. 2 将eth0网卡连接到br0 网卡只有一个接口,这个接口是 ...

  7. mktemp temp race attack 临时文件隐患

    /tmp  安全隐患 -/tmp   在家目录  程序目录下 创建 临时文件

  8. Package vim is not available, but is referred to by another package及我的vim配置

    新安装的ubuntu,先安装vim,但是安装出现 Reading package lists... Done Building dependency tree Reading state inform ...

  9. 网络驱动移植之net_device结构体及其相关的操作函数

    内核源码:Linux-2.6.38.8.tar.bz2 在Linux系统中,网络设备都被抽象为struct net_device结构体.它是网络设备硬件与上层协议之间联系的接口,了解它对编写网络驱动程 ...

  10. HubbleDotNet引擎查询技术

    系统简介 HubbleDotNet 是一个基于.net framework 的开源免费的全文搜索数据库组件.开源协议是 Apache 2.0.HubbleDotNet提供了基于SQL的全文检索接口,使 ...