F# 入门(四):let语句——值的绑定/函数定义

Docker Desktop重装避坑:从卸载到安装的完整流程(Win10/Win11适用) 本文详细介绍了在Windows 10/11系统上彻底卸载和重新安装Docker Desktop的完整流程,包括深度清理残留文件、注册表项和虚拟磁盘,以及安装前的环境准备和安装后的验证步骤,帮助用户避免常见问题并优化Docker环境配置。 阅读详情

let是F#里的最基础和最主要的一个关键字,let语句是变量赋值以及对变量进行函数定义的语句。

let语句主要用来进行变量值得绑定,绑定的值是不能改变的,也就是跟常量一样,这样做可以避免很多程序员疏忽等人为BUG。当然可以通过添加mutable关键字来进行非常量绑定。如下:

let  helloStr = "Hello World" // 不可变的值

let  mutable num = 10 // 定义一个可变的值
num <- 15 //给num值赋值

关于变量和函数的作用域会在接下来介绍F#代码结构中讲到。另外由于F#是垂直编译的(即编译顺序从上到下),所以F#的代码文件是有上下顺序的,规则是同文件中上面代码不能调用定义在下面的值和函数,对于不同文件,被引用的代码要定义在上面的文件里,因为会先编译(在下篇会详细讲到)。

 

用let 进行函数定义,一般有两种方式:

  1. let  函数名 形式参数1  形式参数2  … =      函数体

这种方式定义的函数类型是根据函数体内具体情况来推断出参数的具体类型的,如

let addone a = a + 1
定义了名为"addone"的函数,根据函数体编译器自动推断出参数a是int型变量,当然负责的函数体也一样,但如果函数体里也没有明确的可以推断的话,该值就默认是个泛型'a.

2)let 函数名 (形式参数1:数据类型) (形式参数2:数据类型) ... = 函数体

let  f (x:float) = x * 2.0

这种就跟C# 一样显示的定义参数的类型。

函数的返回值类型:返回值类型就是该函数体最后一行(语句)的值类型。

如:

let  square x = x * x // 如果没有明确推断,乘法计算默认是整形,即返回整形
let  hello name = 

    let  a= 1

    printfn "hello %s" name //这里name根据%s推断出是字符串类型,而printfn函数无返回值,所以该函数返回值是 void
let  test a = 
        a * 3.0 //推断出是float,所以返回值是float型,注,F#中float即是double型
        //()    //如果想不返回值,在函数体最后加()即void

let  returntMultipleValues a b =
        ...
        (a*2,b + 5, a*b) //返回多个值

递归函数

用let rec语句来定义递归函数:

let rec fibonacci n = //斐波那契的递归
    if n = 0 then 0
    else if n = 1 then 1
    else fibonacci (n-1) + fibonacci (n-2)

fibonacci 10 |> printfn "result: %d"

上面定义一个计算斐波那契数列的函数然后输出第10个斐波那契数。递归函数在实际的计算和应用中很有用,所以应当熟练使用。

GEE案例:计算区域生态总体脆弱性分析 计算区域生态总体脆弱性分析需要考虑多个指标和因素。下面是一个基本的方法:选择指标:选择一组能够反映区域生态系统脆弱性的指标。这些指标可以包括生物多样性指数、森林覆盖率、湿地保护率、土地退化程度等。为每个指标分配权重:为了使得各指标在计算中的重要性相对均衡,可以为每个指标分配一个权重。权重可以根据各指标的重要性和可利用的数据进行确定。数据收集和处理:收集每个指标的数据,并对其进行处理,确保数据的准确性和一致性。如果有需要,可以对数据进行归一化处理。计算指标值:根据收集的数据和权重,计算每个指标的值。 阅读详情

相关推荐

微信小程序内容安全审核:从API调用到工程化落地的全流程实践

内容安全是互联网应用开发中的基础性技术环节,尤其在用户生成内容(UGC)场景下,它直接关系到平台的合规性与用户体验。其核心原理通常结合了关键词过滤、自然语言处理(NLP)和计算机视觉(CV)等技术,通过AI模型对文本、图像、音频进行多维度风险识别。这项技术的价值在于,它不仅是满足监管要求的必要手段,更是构建健康社区生态、保护品牌声誉、实现产品长期稳定运营的基石,广泛应用于社交、电商、社区论坛等各类UGC平台。本文聚焦于微信小程序生态,深入剖析其官方提供的内容安全解决方案,详细解读如何将文本同步检测与多媒体异

weixin_28622215的博客 452

tvm.relay学习(十一)——relay let绑定

Let绑定是不可变的局部变量绑定,允许用户将表达式绑定到名称。 Let绑定包含一个局部变量,一个可选的类型注释,一个值和一个可以引用绑定标识符的主体表达式。 如果省略了绑定变量上的类型注释,则Relay会尝试推断该变量允许的最通用类型。 Let表达式中的绑定变量仅在其主体范围内,除非该变量定义了函数表达式。 当Let表达式创建函数时,该变量的值也在范围内,以允许递归定义的函数。 Let绑定的...

weixin_42164269的博客 1330

CCSP考后复盘:那些刷题时感觉良好,考场却发懵的题目到底长什么样?

本文深入分析了CCSP考试中常见的题目陷阱和解题策略,揭示了刷题与实战的差距。通过解析换装题、双胞胎选项和场景题等典型题型,帮助考生掌握拆题技巧和思维模式转变,提升应对CCSP考试的能力。

weixin_30485379的博客 438

let、const块级声明与块级作用域绑定

目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 在ES6之前JS的作用域有三种,它们分别为: 全局作用域 函数作用域 Eval作用域 在ES6中新引入了“块级作用域”这一概念,伴随这一概念诞生的是两种新的变量声明方法,他们依赖于块级作用域而存在。 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as

白瑕 的博客 666

【加密社】私钥碰撞器,秒杀市面上的碰撞器

基于上述的逻辑和代码,开发了ETH挖掘器(图1.1)这里有个亮点是:1.很多开发者在判断地址是否有效的环节上,用的是查询余额,其实这是不对的,查询余额你可能只能查询对应代币的余额,例如usdt,eth等但是如果用查询交易次数就不一样了,你只要是交易过,我就认为是有效钱包,这样的速度比查询余额要快,也要更准确。2.rpc节点可配置。

加密社的博客 1581

微信小程序实现锚点效果 scroll-view的scroll-into-view属性

小程序中实现锚点效果,可以直接使用scroll-view的scroll-into-view属性就可以实现锚点效果,比较方便简单。那么需要用到scroll-view那些参数呢,下面具体讲讲:效果展示: wxml **注意:**viewid值是动态的,通过setData设置即可。js wxss......

FaxMiao的博客 5449

重温ES6之let和const

重温ES6之let和const

weixin_50238437的博客 602

开源分享:苹果群控手机源代码解析与实战

本文介绍了苹果设备群控的基本原理和实现方法,重点解析了基于Python+Appium的群控系统构建。主要内容包括:1)设备连接管理技术(USB/Wi-Fi);2)自动化控制方式(WDA/AppleScript/Appium);3)实战演示了通过Python脚本实现多设备同时控制,涵盖环境配置、代码解析和功能说明;4)提出了多线程、图像识别等优化方向。文章为开发者提供了快速上手的群控方案,适用于自动化测试、批量管理等场景,并推荐了相关开源项目参考。

2403_88540309的博客 1344

Kotlin:常用标准库函数(let、run、with、apply、also)

一、let 扩展函数 Kotlin标准库函数let可用于范围确定和空检查。当调用对象时,let执行给定的代码块并返回其最后一个表达式的结果。对象可以通过引用(默认情况下)或自定义名称在块中访问 二、run 扩展函数 与let类似,run是标准库中的另一个作用域函数。基本上,它做同样的事情:执行一个代码块并返回其结果。 不同的是,在内部运行对象是通过this访问的。当您想要调用对象的方法而不是将其作为参数传递时,这是很有用的。

ChinaDragon10的博客 5179

西门子博图v16安装密钥提示报错:CryptAcquireContext MS_DEF_PROV Error of containger opening...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 3300

CMake是什么?为什么学习CMake

CMake的主要作用和重要性,包括其在跨平台构建中的应用、如何支持多种编译器及操作系统,以及它在管理大型和复杂项目中的优势。

小鱼酱的博客 3871

F#学习笔记(二)F#中的Let关键字

接着前面说到的,严格来讲,F#是一种函数型程序设计语言,她不包含变量这个概念,数值都是通过绑定到标识符来调用的,在F#中提供了关键字"let",可以让我们帮任何表达式都绑定到一个identifier(标识符)上。 我们可以通过let 标识符名 = value;;来绑定一个标识符的值,相当于是一个常量,F#会自动识别出identifier的数据类型,在PF语言中,一...

aowangue83080的博客 242

YOLO26魔改:ICIP2026 SDTA|单深度转置注意力注入C2PSA,长程依赖与局部细节双增强,mAP提升显著

多尺度适配:SDTA的深度卷积与C2PSA的空间注意力结合,增强对多尺度目标的结构感知,改善遮挡与密集场景下的检测鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 293

无涯教程-F# - let绑定

绑定是将标识符或函数与值相关联的过程。let关键字用于将标识符绑定到值。在F#中,无涯教程使用let关键字声明变量、函数和私有类成员。可以在不同的层次上使用LET装订。

无涯教程 330

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

F#入门-第二章 F#基础-第五节 let语句-函数定义

F#入门-第二章 F#基础-第五节 let语句-函数定义

LuLingNiu的专栏 658

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

F#入门-第二章 F#基础-第四节 let语句-值的绑定

F#入门-第二章 F#基础-第四节 let语句-值的绑定

LuLingNiu的专栏 411

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

F#入门学习(二)

F#学习F#基元类型设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图 F#基元类型 设定内容居中、居左、居右 使用:---------:居中 使用:----------居左 使用----------:居右 第一列 第二列 第三列 第一列文本居中 第二列...

I_AM_KK的博客 254

F#快速入门:用函数式流水线处理销售数据

函数式编程是一种以数据流和不可变性为核心的思想范式,其核心原理在于通过高阶函数、管道操作和模式匹配,将业务逻辑表达为清晰的数据转换过程。相比面向对象的命令式步骤清单,它天然具备线程安全、易测试和低副作用的技术价值。典型应用场景包括数据清洗、ETL管道、领域建模及金融计算等对逻辑准确性与可维护性要求高的工程领域。本文基于F#语言,聚焦真实销售CSV分析任务,通过`List.groupBy`、`|>`管道和`Option`类型等关键热词,演示如何在5分钟环境搭建后,写出比C#少40%行数且编译期防错的生产级脚本

diaoqi6581的博客 388

F#奇妙游(27):大大的小小let

let,三个字符,一开始就要用,学到computation expression,居然还会发现let别有洞天,值得一探,真是奇妙!最初刚开始学习F#时,对let的理解是,定义一个变量,或者定义一个函数。但从语法的角度看,结合当时的学习内容,这个理解也是没有问题的。在帮助文档中,"let所声明的实体的作用域限制在包含当前代码的域,仅限于申明之后的部分。"这样来看,可以理解为let在当前作用域例引入一个名称。F#是严格按照顺序的语言,所以let的作用域就是从let开始,到当前作用域结束。

withstand的博客 170

F# 之旅(上)

一、写在前面的话 解答一下在上一篇文章《在Visual Studio中入门F#》中有人的提问,   1. 问:是准备写 F# 系列吗?    答:当然不是,本人也是刚刚学习 F#,只是翻译微软官方的文档,但是我会尽力翻译更多的文章。   2. 问:你们的项目使用F#写的吗?    答:本人大三学生,也不是什么大佬,兴趣而已。 二、在这篇文章中 ...

170

F#实战入门:23行代码搞定CSV订单分析

F#是一种运行在.NET平台上的实用函数式编程语言,以不可变数据、管道操作符和模式匹配为核心特性,天然适合数据处理任务。其类型推导能力强大,记录类型(Record)让领域建模直观简洁,与C#、Python等语言相比,在解析CSV、清洗日志、聚合API响应等场景中能显著减少胶水代码和运行时错误。本文基于真实订单分析案例,展示如何用声明式数据流替代嵌套循环与临时变量,突出F#在ETL脚本、报表生成、配置校验等低副作用模块中的工程优势,并强调其与.NET生态的无缝互操作性。

a6t2007的博客 496

12.4.2 自定义 F# 语言

12.4.2 自定义 F# 语言   到目前为止,我们所讨论过的序列表达式,都是用 seq 标识符表示,后面的代码块括在大括号中。然而,F# 还允许我们创建自己的标识符,给代码块以特殊的意义。通常,这个功能称为计算表达式(computation expressions),而序列表达式是它的一个特例,是由 F#核心所实现,并经编译器优化。 我们已经知道,计算表达式可以包含标准的语言结构,比如

心想事成 884

6.1.1 F# 中的泛型函数

6.1.1 F# 中的泛型函数   在第五章,我们看过一个简单的泛型函数,它只有一个泛型选项类型的参数。清单 6.1 是用F# 实现CondPrint 方法的,来自"在函数式编程和面向对象中的泛型代码"侧边栏。它有三个参数值:一个值、一个函数,用于测试是否应打印这个值,还有一个函数,用于设置格式化这个值。   清单 6.1 泛型函数 condPrint (F# Interactive)

心想事成 871

F#程序设计-面向对象编程之类的定义

F#的面向对象编程与其他的.NET语言总体上没有什么多大的区别,除了语法上有些区别之外。在用户自定义类型当中,类(class)可能定义最频繁的类型吧,F#有两个独特的语法来定义类的构造函数:显式构造与隐式构造。前者更符合F#简单而又简洁的语法,而后者允许更明确的控制类是如何产生的。一、显式构造显式构造是相对于隐式构造来说虽然看来没有那么灵活,但是它提供了最大的控制。

AAAA的专栏 821

F#学习笔记(三) 函数

接着要讲的是F#中的函数,上面说到过标识符可以绑定任何的表达式,同样,标识符也可以绑定到函数,F#中的函数通过关键字fun来表示, let addTenToNumber = (fun x -> x + 10);; 也是通过let关键字来绑定到标识符,响应的结果是 val addTenToNumber : int -> in...

aowangue83080的博客 153

6.1.1 写 F# 中的泛型函数

6.1.1 写 F# 中的泛型函数       在第 5 章,我们看到了一个简单的泛型函数,它只使用单个参数值,是一个泛型选项类型。清单 6.1 显示 CondPrint 方法的 F# 实现,来自"在函数式编程和面向对象中的泛型代码"侧边栏。它有三个参数值:一个值、一个函数,用于 测试是否应打印这个值,还有一个函数,用于设置格式化这个值。   Listing 6.1 Generic fun

心想事成 723
上一篇: F# Interactive技巧:在sprintf/printf/fprintf中使用AddPrinter,addPrintTransformer和%A来格式化数据
下一篇: F# 入门(三):F# 基础数据类型
fsharp_net
博客等级 码龄15年 20粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值