合集-F#奇妙游
摘要:有缺失值的数据 假设我们有一个类似于CSV的文件,每行的数据用’,'隔开。文件中有些数据是缺失的,也有些数据没有保存,采用字符串说明。 12,45,23,,23,99,33,24,,"help, Oh, help",34 7,8,3,53,,9,13,22,"help, Oh, help",,24
阅读全文
摘要:突然想做点有用的东西 天天学F#,感觉又没有动力了。还是要做点好玩点的、有用的东西才会更加有积极性。因为F#活在.NET平台中,做有用的东西简直太简单了。结合到最近知乎和别的平台一直在叽叽咕咕发视频,我没有怎么做过视频,但是PPT做得不少。我就想为啥不能把PPT直接搞成视频呢? 这不思路一下子打开了
阅读全文
摘要:option 在处理数据时,缺失数据和无效数据是一个常见的问题。在Python中,通常使用None来表示缺失数据。 在F#中,我们可以使用FSharpOption来表示缺失数据。FSharpOption是一个泛型类型,它有两个值:Some和None。Some表示一个值,而None表示一个缺失的值。F
阅读全文
摘要:Computation Expression More F#中自定义的 Computation Expression 一共有8个语法构造,其中match!是let!的语法糖。 在前面的一个帖子里CE初探我们已经介绍了 computation expression 中的绑定和返回,语法是let!和re
阅读全文
摘要:简单值的ADT 在领域建模中,我们尝尝会遇到一些简单的值,比如人的名字、人的编号、物品的代码。如果过早进行程序设计,这些值很容易就会变成程序设计语言中的基本量,string、int这些,就比如人的标号和物品的编号,很容易就被记录为int。然而根据DDD的原则,我们应该尽可能用领域专家认可的方式来记录
阅读全文
摘要:小小的let let,三个字符,一开始就要用,学到computation expression,居然还会发现let别有洞天,值得一探,真是奇妙! 最初刚开始学习F#时,对let的理解是,定义一个变量,或者定义一个函数。但从语法的角度看,结合当时的学习内容,这个理解也是没有问题的。 let x = 1
阅读全文
摘要:computation expression之一问三不知 计算表达式是一个有点难理解的东西。我把帮助全部看了一遍,记住了个上下文敏感的计算(contex-sensitive computation)。但是让我讲计算表达式是什么?为什么?怎么做?我是满头雾水。我大概知道是什么,就是一个语法特征,在一个
阅读全文
摘要:前言 采用ADT来对领域进行设计,是一种很好的实践。在这种实践中,我们可以把领域中的数据抽象成ADT,把领域中的操作抽象成函数,然后利用ADT的类型系统来进行类型检查,从而保证领域中的数据和操作的正确性。 设计目标 首先,我们的设计目标如下: 各领域专家架和程序开发都能够理解的设计能够利用ADT的类
阅读全文
摘要:ADT与表达式 这篇主要是写函数式编程中的元素与ADT的关系,特别的就是关于表达式的讨论。在函数式编程中,表达式也是一个比较重要概念。下图是Scott Wlaschin关于F#核心概念的图。 函数式编程 F# 表达式与值 类型系统 模式匹配 区别于面向过程的程序主要由语句(Statement)构成,
阅读全文
摘要:代数数据类型与领域驱动设计 代数数据类型(Algebraic Data Type,ADT)和抽象数据类型(Abstract Data Type,ADT)都与数据类型设计有关,但是两者的设计思想是不同的。抽象数据类型是OOP领域常用的设计思想,注重对实体对象的状态变化的封装和抽象;而代数数据类型则是组
阅读全文
摘要:一个小问题的求解 问题 一根 1m 长的玻璃棒,摔倒地上断成 3 段,最短一段的平均值是多少? 假设玻璃棒一定会摔成三段,且玻璃棒质地均匀,为理想状态。 物理的视角 玻璃棒摔成三段,其物理过程是什么样的? 有一位网友分析了倾斜碰撞的应力分布,提出了断裂位置的可能性分布,并把一次断成三阶分解为同时发生
阅读全文
摘要:Pattern Matching 为什么老是你! 什么是模式匹配 模式匹配是一种编程语言的特性,它可以让我们根据不同的模式来执行不同的代码。模式匹配的本质是一种条件分支,但是它的语法更加简洁,更加清晰。 在F# for fun and profit中,把模式匹配(控制结构)作为F#函数式编程的四个关
阅读全文
摘要:F#中主动模式的三种形式 F#中有一种特殊的模式匹配,叫做主动模式(Active Pattern)。主动模式可以让我们自定义模式匹配的方式,这样可以让我们的代码更加简洁,更加清晰。主动模式有三种形式,分别是: 单选项主动模式多选项主动模式部分应用的主动模式 这三个方式的语法如下: let (|Act
阅读全文
摘要:分支选择 F#中的match语句是一个强大的工具,它可以用来匹配各种各样的模式。match语句的一般形式如下: match expression with | pattern1 [when condition1]-> result1 | pattern2 [when condition1] -> r
阅读全文
摘要:Mergesort mergesort是一个典型的分而治之、迭代的算法。它将一个数组分成两个子数组,分别排序,然后将有序的子数组归并为一个有序的数组。归并操作是将两个有序数组归并成一个有序数组的过程。 mergesort的时间复杂度为O(nlogn),最佳和最坏情况下的时间复杂度都是O(nlogn)
阅读全文
摘要:F#还能干点啥 距离上一次更新已经过去了很久(40分钟之久!),这段时间我在学习F#,并且在工作(划掉,躺肥并没有工作要做)中使用F#。 那干点啥呢?还是老本行吧,搞点飞行力学。 有一个球(质点),在一维平面大地、真空两个假设条件下,以一定的初始速度和初始角度抛出,求其运动轨迹。什么?这也是飞行力学
阅读全文
摘要:面向对象编程掉书袋 Object-oriented programming (OOP) is a programming paradigm that uses abstraction to create models based on the real world. It uses several
阅读全文
摘要:WPF but F# 上一篇,写了一个F#的WPF,所有的东西都是随手写出来的,没有经过详细考虑和设计。就是吧,一点也不优雅……咋们虽然头发不多,但是优雅永不过时! 实际上能用的开源UI库(F#,WPF)有两个: Avalonia.FuncUI Elmish.WPF 本文旨在学习F#,因此不使用任何
阅读全文
摘要:WPF中的绑定 绑定在UI开发中是一个非常重要的概念,它可以让我们的UI界面和数据模型之间建立起联系,当数据模型发生变化时,UI界面也会随之变化,反之亦然。这样的好处是显而易见的,我们不需要手动去更新UI界面,而是让数据模型自己去更新UI界面,这样的代码更加简洁,更加易于维护。 在传统的UI开发中,
阅读全文
摘要:F# 代码风格 这玩意有两点不能忘记,第一点这是很高级的内容,不要相信那些要求你一开始学习F#就要这样就要那样;第二点,这些内容根据不同的项目和不同的组织时时长变动的,并没有什么一定要遵循的准则。基于这两点认知(这两点是认知吗?是的),这是高级要求,这是项目实施的特定要求,该怎么做呢? 知道有这个事
阅读全文