摘要:
代数数据类型与领域驱动设计 代数数据类型(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) 阅读全文
摘要:
Java桌面技术 Java桌面技术是Java语言的一个重要应用领域,它的主要特点是跨平台,即一次编写,到处运行。Java桌面技术主要包括JavaFX和Swing两种技术。 最开始的时候,在Swing之前,Java还有Applet和AWT两种技术,但是这两种技术已经被淘汰(?),所以这里不再介绍。 我 阅读全文
摘要:
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#,因此不使用任何 阅读全文