F#教程(一)

F#2.02LanguageSpecification This documentation is a release candidate of the specification of the 2.0 release of F# made by Microsoft Research and the Microsoft Developer Division in April 2010 立即下载
// This sample will guide you through elements of the F# language.  这个示例将会指导你通过F#语言的元素
//
// *******************************************************************************************************
//   为了交互执行F#代码,可以选择部分代码并按下Alt+回车,To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click
//   或者点击右键选择“交互执行”。你可以在“视图”菜单打开F#交互窗口and select "Execute in Interactive".  You can open the F# Interactive Window from the "View" menu.
// *******************************************************************************************************
//
// 更多关于F#的,请看:For more about F#, see:
//     http://fsharp.org
//
// 若要使用 F # 的其他模板,请参阅在 Visual Studio 中的在线模板For additional templates to use with F#, see the 'Online Templates' in Visual Studio,
//     新建项目-->在线模板'New Project' --> 'Online Templates'
//
// 具体的F#专题,请看:For specific F# topics, see:
//     http://go.microsoft.com/fwlink/?LinkID=234174 (F#开发门户) (F# Development Portal)
//     http://go.microsoft.com/fwlink/?LinkID=124614 (代码库)(Code Gallery)
//     http://go.microsoft.com/fwlink/?LinkId=235173 (数学/统计编程)(Math/Stats Programming)
//     http://go.microsoft.com/fwlink/?LinkId=235176 (图表)(Charting)
// 内容Contents:
//    - 整型和基本函数Integers and basic functions
//    - 布尔值Booleans
//    - 字符串Strings
//    - 元组Tuples
//    - 列表和列表处理Lists and list processing
//    - 类Classes
//    - 泛型类Generic classes
//    - 实现接口Implementing interfaces
//    - 数组Arrays
//    - 数列Sequences
//    - 递归函数Recursive functions
//    - 记录类型Record types
//    - 联合类型Union types
//    - 选项类型Option types           
//    - 模式匹配Pattern matching       
//    - 计量单位Units of measure       
//    - 并行数组编程Parallel array programming
//    - 使用事件Using events
//    - 使用类型提供程序的Database访问Database access using type providers
//    - OData 访问使用提供程序类型OData access using type providers       最后这两个应该是关于数据库的,不会翻译,采用机翻

// ---------------------------------------------------------------
//        整型和基本函数 Integers and basic functions
// ---------------------------------------------------------------
module Integers =
    let sampleInteger = 176
    /// 对前面那个整数进行一些运算Do some arithmetic starting with the first integer
    let sampleInteger2 = (sampleInteger/4 + 5 - 7) * 4
    /// 从0到99的数的列表A list of the numbers from 0 to 99
    let sampleNumbers = [ 0 .. 99 ]
    /// 一个包含0到99的整数以及它们的平方的列表A list of all tuples containing all the numbers from 0 to 99 and their squares
    let sampleTableOfSquares = [ for i in 0 .. 99 -> (i, i*i) ]
    // 下一行代码打印了一个包含元组的列表,用%A进行通用输出The next line prints a list that includes tuples, using %A for generic printing
    printfn "The table of squares from 0 to 99 is:\n%A" sampleTableOfSquares

module BasicFunctions =
    // 用“let”关键字定义一个函数,该函数输入一个整数并返回一个整数Use 'let' to define a function that accepts an integer argument and returns an integer.
    let func1 x = x*x + 3            
    // 定义时函数参数可以加括号也可以不加Parenthesis are optional for function arguments
    let func1a (x) = x*x + 3            
    /// 使用这个函数,用“let”获取返回值Apply the function, naming the function return result using 'let'.
    /// 变量的类型时从函数的返回类型推断出来的The variable type is inferred from the function return type.
    let result1 = func1 4573
    printfn "整数4573的平方加3的结果是%d The result of squaring the integer 4573 and adding 3 is %d" result1
    // 如果需要,可以使用“(变量名:类型)”的格式显式地指定类型When needed, annotate the type of a parameter name using '(argument:type)'
    let func2 (x:int) = 2*x*x - x/5 + 3
    let result2 = func2 (7 + 4)
    printfn "对(7+4)应用第一个示例函数的结果是%d The result of applying the 1st sample function to (7 + 4) is %d" result2
    let func3 x =
        if x < 100.0 then
            2.0*x*x - x/5.0 + 3.0
        else
            2.0*x*x + x/5.0 - 37.0
    let result3 = func3 (6.5 + 4.5)
    printfn "对(6.5+4.5)应用第二个示例函数的结果是%f The result of applying the 2nd sample function to (6.5 + 4.5) is %f" result3

// ---------------------------------------------------------------
//        布尔值 Booleans
// ---------------------------------------------------------------
module SomeBooleanValues =
    let boolean1 = true
    let boolean2 = false
    let boolean3 = not boolean1 && (boolean2 || false)
    printfn "表达式 'not boolean1 && (boolean2 || false)' 的值是%A The expression 'not boolean1 && (boolean2 || false)' is %A" boolean3

// ---------------------------------------------------------------
//         字符串Strings
// ---------------------------------------------------------------
module StringManipulation =
    let string1 = "Hello"
    let string2  = "world"
    /// 用@符号创建一个不转义的字符串Use @ to create a verbatim string literal
    let string3 = @"c:\Program Files\"
    /// 使用三引号字面意义Using a triple-quote string literal
    let string4 = """He said "hello world" after you did"""
    let helloWorld = string1 + " " + string2 // 把两个字符串串在一起而且它们之间用空格分开concatenate the two strings with a space in between
    printfn "%s" helloWorld
    /// 一个由结果字符串的前7个字符组成的字符串A string formed by taking the first 7 characters of one of the result strings
    let substring = helloWorld.[0..6]
    printfn "%s" substring

// ---------------------------------------------------------------
//         元组(有序值集)Tuples (ordered sets of values)
// ---------------------------------------------------------------
module Tuples =
    /// 一个简单的整数元组A simple tuple of integers
    let tuple1 = (1, 2, 3)
    /// 一个可以交换一个元组中值的顺序的函数A function that swaps the order of two values in a tuple.
    /// 快速信息显示出该函数推断出具有泛型类型QuickInfo shows that the function is inferred to have a generic type.
    let swapElems (a, b) = (b, a)
    printfn "The result of swapping (1, 2) is %A" (swapElems (1,2))
    /// 一个由一个整数、一个字符串和一个双精度浮点数组成的元组A tuple consisting of an integer, a string, and a double-precision floating point number
    let tuple2 = (1, "fred", 3.1415)
    printfn "tuple1: %A    tuple2: %A" tuple1 tuple2
   

// ---------------------------------------------------------------
//        列表和列表处理 Lists and list processing
// ---------------------------------------------------------------
module Lists =
    let list1 = [ ]            ///一个空的列表 an empty list
    let list2 = [ 1; 2; 3 ]    /// 3个元素的列表 list of 3 elements
    let list3 = 42 :: list2    ///42加入到开头的新列表 a new list with '42' added to the beginning
    let numberList = [ 1 .. 1000 ]  /// 一个从1到1000整数的列表 list of integers from 1 to 1000
    ///一个包含了一年所有日期的列表 A list containing all the days of the year
    let daysList =
        [ for month in 1 .. 12 do
              for day in 1 .. System.DateTime.DaysInMonth(2012, month) do
                  yield System.DateTime(2012, month, day) ]
    /// 包含棋盘上黑白方格坐标的列表 A list containing the tuples which are the coordinates of the black squares on a chess board.
    let blackSquares =
        [ for i in 0 .. 7 do
              for j in 0 .. 7 do
                  if (i+j) % 2 = 1 then
                      yield (i, j) ]
    /// 将numberList里面的数平方,用管道运算符给List.map传递参数 Square the numbers in numberList, using the pipeline operator to pass an argument to List.map   
    let squares =
        numberList
        |> List.map (fun x -> x*x)
    ///计算被3整除的数的平方和 Computes the sum of the squares of the numbers divisible by 3.
    let sumOfSquares =
        numberList
        |> List.filter (fun x -> x % 3 = 0)
        |> List.sumBy (fun x -> x * x)

// ---------------------------------------------------------------
//         类Classes
// ---------------------------------------------------------------
module DefiningClasses =
    /// 这个类的构造函数有两个参数:dx和dy,都是float型(浮点型)的  注:Vector2D的意思是平面向量 The class's constructor takes two arguments: dx and dy, both of type 'float'.
    type Vector2D(dx : float, dy : float) =
        ///计算这个向量对象被构造的时候的长度 The length of the vector, computed when the object is constructed
        let length = sqrt (dx*dx + dy*dy)
        //“this”关键字表示对象自己 'this' specifies a name for the object's self identifier.
        //在实例方法中,它(指this)必须出现在成员名称之前 In instance methods, it must appear before the member name.
        member this.DX = dx 
        member this.DY = dy
        member this.Length = length
        member this.Scale(k) = Vector2D(k * this.DX, k * this.DY)
   
    /// Vector2D类的一个实例An instance of the Vector2D class
    let vector1 = Vector2D(3.0, 4.0)
    ///不修改原对象而得到一个新的缩放后的vector对象 Get a new scaled vector object, without modifying the original object
    let vector2 = vector1.Scale(10.0)
    printfn "Length of vector1: %f      Length of vector2: %f" vector1.Length vector2.Length

// ---------------------------------------------------------------
//         泛型类Generic classes
// ---------------------------------------------------------------
module DefiningGenericClasses =
    type StateTracker<'T>(initialElement: 'T) = // 'T是这个类的参数类型 'T is the type parameter for the class
        ///列表中的储存状态 Store the states in a list
        let mutable states = [ initialElement ]
        ///将一个新的元素假如到这个states列表 Add a new element to the list of states
        member this.UpdateState newState =
            states <- newState :: states  // 用“<-”运算符改变这个值 use the '<-' operator to mutate the value
        /// 得到这整个列表的历史states Get the entire list of historical states
        member this.History = states
        ///获取最新的状态 Get the latest state
        member this.Current = states.Head
    /// 这个泛型类的一个int类型的实例,请注意参数的类型是被推导出来的 An 'int' instance of the state tracker class. Note that the type parameter is inferred.
    let tracker = StateTracker 10
    // 添加状态Add a state
    tracker.UpdateState 17

// ---------------------------------------------------------------
//        实现接口 Implementing interfaces
// ---------------------------------------------------------------
///实现IDisposable接口 Type that implements IDisposable
type ReadFile() =
    let file = new System.IO.StreamReader("readme.txt")
    member this.ReadLine() = file.ReadLine()
    //这个类对IDisposable接口的实现 this class's implementation of IDisposable members
    interface System.IDisposable with   
        member this.Dispose() = file.Close()

// ---------------------------------------------------------------
//        数组 Arrays
// ---------------------------------------------------------------
module Arrays =
    ///空数组 The empty array
    let array1 = [| |]
    let array2 = [| "hello"; "world"; "and"; "hello"; "world"; "again" |]
    let array3 = [| 1 .. 1000 |]
    /// 只包含了单词“hello”和“world”的数组An array containing only the words "hello" and "world"
    let array4 = [| for word in array2 do
                        if word.Contains("l") then
                            yield word |]
    /// 按照索引包含了从0到2000中所有偶数的数组An array initialized by index and containing the even numbers from 0 to 2000
    let evenNumbers = Array.init 1001 (fun n -> n * 2)
    ///使用切片表示法提取的子数组 sub-array extracted using slicing notation
    let evenNumbersSlice = evenNumbers.[0..500]
    for word in array4 do
        printfn "word: %s" word
    // 用左箭头赋值运算符修改数组元素modify an array element using the left arrow assignment operator
    array2.[1] <- "WORLD!"
    /// 计算以h开头的 单词长度的总和Calculates the sum of the lengths of the words that start with 'h'
    let sumOfLengthsOfWords =
        array2
        |> Array.filter (fun x -> x.StartsWith "h")
        |> Array.sumBy (fun x -> x.Length)

F#_入门教程 F#_入门教程,非常容易上手,同时,也是未来微软大数据主要的语言 立即下载

相关推荐

F# Language Overview

这篇文章主要论述了F#语言比较重要的方面和一些热门的话题,想学习F#的朋友可以作为入门教材。

F# 快速教程

文章目录基础应用绑定变量运算符数据类型基本类型tuple, list, array, seqmapsetrecordDU函数函数复合面向对象class抽象类和接口代码组织脚本编译F#文件在WPF中调用F#代码把F#转为C# F#是微软开发的基于.NET平台的一款面向对象的函数式语言,安装过程非常简单,只需要下载最新版的VisualStudio,在安装的过程中选择F#即可。 创建项目也很简单,只要在VS中新建一个F#项目即可。快捷键F5启动程序,可以在命令行中查看输出。此外,微软还提供了fsi.exe这款命令

微小冷的学习笔记 2622

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5060

【F#初学者】第一讲 F#简介&&&第一个F#程序

F#初学者系列,介绍了F#的优势和编写了第一个程序

scixing的博客 1128

ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

【代码】ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

weixin_47584092的博客 910

Pywinauto与Inspect.exe完美搭配:解决Windows应用UI自动化中的元素定位难题

本文详细介绍了如何将Pywinauto与Inspect.exe结合,以解决Windows应用UI自动化中的核心难题——元素定位。通过实战指南,阐述了如何利用Inspect.exe在UIA模式下精准侦察控件属性,并将这些信息转化为Pywinauto的稳健定位策略,从而高效自动化WPF、WinForms等现代框架构建的复杂桌面应用。

weixin_29297127的博客 520

F#教程: 函数 20个例子详解

在本篇文章中,我们介绍了20个F#函数的例子,并详细解释了它们的工作原理。本文所列举的F#函数只是其中的一小部分。函数是F#编程的核心,因此熟练掌握它们是非常重要的。学习F#函数有助于您更好地理解F#以及函数式编程的核心思想。希望这篇文章能够帮助您更好地了解F#函数的基础知识。

weixin_46121540的博客 334

人脸关键点定义汇总

前几天看一份代码临时需要找49个人脸关键点位置定义的图片发现怎么百度都搜不到,最后幸好谷歌可以使用了就用谷歌搜到了。所以在这里汇总一下我所知道的人脸关键点的定义和相关的一点东西,以备不时之需。 68个关键点 最常用的工具是Dlib,网址:http://dlib.net/ dlib的68个特征点检测算法是ERT算法【1】 使用dlib检测68个特征点的python示例见:http://dlib.n...

程序媛 7642

使用F#进行图像识别的基础教程

本文将展示如何使用 F# 和 System.Drawing 以及 Accord.NET 库来实现一个简单的图像识别任务。我们将加载图像,进行基本的预处理,并应用边缘检测算法来识别图像中的主要特征。如果没有安装,请访问 Microsoft .NET 下载并安装最新版本的 .NET SDK。preprocessImage 函数:将图像转换为灰度图像,并应用高斯模糊进行预处理。这将显示三个窗口:原始图像、预处理后的图像和边缘检测结果图像。main 函数:执行图像加载、预处理、边缘检测和图像显示。

asfdsgdf的博客 420

5、OpenClaw(龙虾助手)飞书机器人完整对接指南(2026最新版)

OpenClaw v2026.2.2+ 版本,防火墙内也能正常工作,是目前最稳定、最简单的企业内部AI助手部署方案。

欢迎光临~知1而N的博客 457

【03】海康MVS V4.3.0 ——安装教程、查看示例、库、头文件、开发指南

海康威视MVS机器视觉软件安装与使用指南:首先从官网下载MVS 4.3.0安装包,默认设置完成安装。安装后可在Development目录查看示例代码、开发文档及头文件,支持C++/C#/Python等多语言开发。软件内置虚拟相机功能,通过工具菜单添加虚拟设备后即可模拟真实相机操作,支持中英文界面切换、参数调节(曝光/增益等)及图像采集功能。虚拟相机虽仅能显示预设图像,但完整保留了参数调节功能,适合开发者进行功能测试。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 3308

F#教程: 基础语法

F#是一种跨平台的函数式编程语言,它结合了函数式编程和面向对象编程的特性。它是一门简洁、高效、安全和可扩展的语言,具有高度的表达能力和可读性。在本文中,我们将会介绍F#的基础语法,并提供相关示例,帮助读者更好地理解F#的特性和优势。本文的目标读者是已经掌握一门编程语言,并对F#有一定了解的读者。

weixin_46121540的博客 1052

使用 MATLAB/Simulink + Reinforcement Learning Toolbox 构建一个基于强化学习的永磁同步电机(PMSM)自适应控制仿真系统

随着人工智能(AI)技术的快速发展,强化学习(Reinforcement Learning, RL)在控制系统中的应用日益广泛。在电机控制领域,传统的PID控制虽然成熟稳定,但在面对非线性、时变、不确定负载等复杂工况时,其控制性能可能受限。而强化学习通过与环境的交互学习,能够实现在线自适应控制策略优化,显著提升系统的鲁棒性与响应速度。本教程将带你使用构建一个基于强化学习的永磁同步电机(PMSM)自适应控制仿真系统,实现从控制策略设计、环境建模、训练到仿真的全过程。当前转速(ω)

amy_mhd的博客 407

F#教程(一)——————F#语言概述

F#是一种简洁、高效、富于表现性的函数式的及面向对象的程序设计语言。它是基于Ocaml的,而Ocaml是基于ML函数程序设计语言的。F#自2002年开始研发,2005年发布了第一个版本,2007年底正式从研发专案转移至产品部门,并决定将F#置入Visual Studio.NET 2010。截止目前(2009年1月6日现在),最新的F#预览版为F# September 2008 CTP,版本号为

1万+

【CUDA编程部署教程】第一章:GPU架构与CUDA编程核心 1

我们将剖析现代GPU的计算心脏——流式多处理器(SM),理解其独特的Warp执行模型,探索Tensor Core带来的革命性矩阵运算加速,并深入探讨决定性能命脉的内存体系。当必须访问全局内存时,则必须遵循**合并访问(Coalesced Access)**的原则,即让一个Warp内的32个线程访问连续的内存地址,从而让硬件将多次访问合并为一次高效的内存事务,以充分利用带宽。SM的调度器以Warp为单位分派指令,在一个Warp内,所有32个线程在同一时刻执行完全相同的指令,但处理的数据不同,这种模型被称为。

VectorShift的博客 221

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

F#简明教程一:F#与函数式编程概述

F#是微软.NET开发平台的一门编程语言,其最大的特点是对函数式编程(FP,Functional Programming)的引入;F#对面向对象(OOP)编程的支持也很出色,使用F#语言,开发人员可以自由选择函数式编程或面向对象编程来实现他们的项目。此外,F#还可以与.NET平台上C#、VB等其他编程语言紧密结合。 CPU多核心化和云计算的背景下,函数式编程可以很好的解决多并发运算的问题...

weixin_34112030的博客 579

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从链接列表到内容地图:打造可持续维护的博客汇总页

在知识库、技术博客与内容管理系统中,信息架构决定了内容能否被高效发现和长期复用。当内容规模突破一定阈值,站内检索往往难以匹配读者真实场景——读者按任务关键词搜索,作者却按主题组织内容。此时,基于分类体系和标签体系构建的导航地图,可以显著降低信息检索成本:分类保证穷尽且互斥的浏览路径,标签则提供跨主题的灵活入口。工程实践上,采用结构化数据与自动化生成代替手工维护,配合发布前检查、定期内容审计和过时/归档状态管理,能有效防止页面烂尾与内容漂移。博客汇总页正是这套理念的落地场景:一张持续更新的内容地图,不仅让旧文

weixin_34208185的博客 337

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

F#语言快速教程

F#是微软开发的基于.NET平台的一种函数式语言,而且支持面向对象。

微小冷的学习笔记 6985

F# 教程

F# 是一种多范式编程语言,它可以支持面向对象编程、函数式编程和并发编程。Framework上得到了广泛的应用,它的语法非常简洁,而且易于学习。本篇文章将介绍 F# 的基础知识和一些重要的语法概念。

weixin_46121540的博客 772

F#基础篇_(1)F#简介

F#的简介以及开发环境配置

qq_56942034的博客 1912

F# 量化金融指南(一)

在本章中,你将了解 F# 的历史及其在其他编程语言中的根源。我们还将介绍 Visual Studio 及 F# 的基本语言构造。你将通过交互模式逐步原型化代码,变得更加熟悉如何在 F# 中将各个模块拼接起来构建程序。此外,本章将通过使用和评估代码的读取-求值-打印循环REPL)来涵盖语言的基础。在本章中,你将学习:如何在 Visual Studio 2012 中使用 F#如何使用 F# Interactive 以全新的探索方式编写代码F# 的基础知识及如何编写你的第一个非玩具应用。

龙哥盟 1118

F# 基础

F# 基础 再译《F# 基础》序 前言 第一章     什么是函数编程     函数编程为啥重要     什么是 F#     谁在用F#     谁能读本书 第二章 获得、安装、使用 F# 第三章 函数编程(一)     文字、函数、标识符、标识符的命名、作用域、轻量语法 第三章函数编程(二)     捕获标识符、use

心想事成 3199

无涯教程-F# - 方法重载

您可以重新定义或重载F#中可用的大多数内置运算符,因此,程序员也可以将运算符与用户定义的类型一起使用。运算符是带有特殊名称的函数,括在方括号中,必须将它们定义为静态类成员,像任何其他函数一样,重载运算符具有返回类型和参数列表。以下示例显示了复数上的+运算符-//重载 + 运算符staticmember(+)aComplexbComplexComplexaxbxayby上面的函数为用户定义的类Complex实现加法运算符(+)。

无涯教程 902
上一篇: 遥控小车之:HTML5+ 虚拟摇杆
Tianzei
博客等级 码龄10年 10粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值