- 博客(33)
- 收藏
- 关注
原创 函数式编程 第八讲 循环者,递归也
本文探讨了函数式编程中循环与递归的等价性及适用场景。通过分析循环和尾递归的结构相似性(初始状态、状态传递、终止条件),指出在业务逻辑中,尾递归可以更清晰地表达"直到成功"的意图。文章比较了命令式循环和函数式递归在动态规划算法和重试(retry)场景下的适用性:循环适合计算密集型任务,而递归更适合表达业务意图。最后提出可将重试逻辑抽象为高阶函数,强调函数式编程通过"将流程转化为值"来提升代码可读性和可组合性,同时指出在C#中使用尾递归需注意性能优化问题。
2025-11-27 23:34:53
660
原创 【C#探索】.NET10 C#14前瞻
【C#14新特性前瞻】文章摘要:.NETConf2025将发布.NET10正式版,C#14带来多项重要更新:1.全新扩展方法语法,支持方法、属性及运算符扩展,提升函数式编程体验;2.幕后变量(field)自动生成简化属性定义;3.Null条件分配支持安全赋值;4.改进的JSON序列化支持PipeReader;5.简单lambda参数支持out修饰符;6.用户自定义复合运算符和分部构造函数;7.字符串数字排序优化。这些改进使C#更简洁高效,同时增强函数式编程能力。
2025-11-15 09:46:59
587
原创 【F#入门】 第六讲 计算表达式(与异步模型简介)
本文介绍了F#中计算表达式的概念,用于简化代数数据类型的组合运算。通过定义OptionBuilder类型实现Bind和Return方法,可以优雅地处理Option类型的值组合问题,避免繁琐的模式匹配。计算表达式支持let!、return等语法,类似于C#的LINQ查询表达式。文章还展示了如何将这一模式应用于异步编程(Async/Task),通过async/task表达式简化异步操作组合。这种方法将高级值视为普通值处理,无需关注具体实现细节,体现了函数式编程的抽象能力。计算表达式大大提升了代码可读性和编写效率
2025-10-08 12:06:51
668
原创 【函数式编程】七- 数据结构
本文探讨了函数式编程与数据结构的结合,重点介绍了两种不可变数据结构的实现方式:链表和二叉树。通过递归定义和不可变性原则,文章展示了如何用F#和C#构建函数式链表(List<T>)和二叉树(Tree<T>)。这些结构遵循函数式编程的核心特性:不可变性(修改时创建新对象)和表达式特性(确定性输出)。文章指出函数式数据结构在多读少写场景下的优势,包括状态回溯能力和高级抽象处理能力,同时也提到其性能特点(如尾部操作效率问题)。最后鼓励读者自行实现树的Map和Insert函数以深入理解函数式数
2025-09-28 18:04:30
874
原创 Visual Studio 2026预览版发布!
VS2026预览版发布,带来多项重大更新:性能显著提升,启动和项目加载速度更快;采用Fluent UI重新设计界面,提供11种配色方案;编辑器新增文件编码修改功能,原生支持Mermaid语法;搜索功能优化,可排除指定文件夹;Copilot能力增强,支持意图识别、自适应粘贴和自定义模型;新增.NET性能测试模板,支持报表输出;Git工具支持内联拉取请求注释。推荐配置16核CPU+64GB内存,但优化后性能仍优于VS2022。
2025-09-17 09:36:31
4437
原创 【C#探索】C#中三种只读/不可变集合有什么用?
本文介绍了C#中三种只读/不可变集合的区别与应用:Readonly系列是对可变集合的简单封装,成本低适用于限制修改权限;Immutable系列采用函数式编程理念,通过创建新对象实现修改,适合多线程和版本追踪场景;Frozen系列是.NET8新增的真正不可变集合,优化读取性能但创建开销大,适用于只读常量表。文章通过历史演变、性能对比和典型场景分析,帮助开发者根据需求选择合适的集合类型。
2025-09-07 00:15:43
925
原创 【开小差系列】如何限制共享文件夹的出站网速
本文介绍了在Windows系统中限制SMB共享文件夹出站网速的方法。首先通过组策略管理器创建QoS策略,设置限速值和端口445。对于非域网络环境,还需使用PowerShell命令将策略作用范围从"Domain"修改为"All"。最后通过测试验证配置效果。文章来自Bilibili@无聊的年和微信公众号@scixing的炼丹房。
2025-07-30 15:45:54
648
原创 【函数式编程】(六.plus)LINQ查询表达式 如何让我们的代码变得更加优雅?
本文探讨了C#中LINQ查询表达式与扩展方法式写法的差异与应用场景。查询表达式借鉴SQL语法风格,提供强大的查询能力,但其在代码中可能显得突兀。通过LanguageExt库示例,展示了查询表达式如何优雅处理单子流(嵌套bind),相比传统嵌套写法更简洁。文章对比了应用式与单子流的区别:应用式适合并行计算和错误收集,而单子流支持参数依赖且具备快速失败特性。最后指出二者在函数式编程中各有优势,应根据场景选择合适方法。
2025-07-24 10:41:14
928
原创 【函数式编程】六- 多参函数与应用式
本文探讨了函数式编程中处理多参函数的解决方案。首先介绍了柯里化和偏函数应用,将多元函数转化为一元函数序列。然后讲解了正向/反向函数应用的差异及反向应用在代码可读性和可维护性上的优势。重点阐述了应用式(Applicative)的概念,它允许在高级抽象层级中处理多参函数,解决了嵌套Map/Bind带来的复杂性。通过Either示例展示了应用式如何简化抽象层级的组合操作,并指出应用式介于函子(Functor)和单子(Monad)之间的特性。文章为处理多参函数提供了实用的函数式编程技巧。
2025-07-05 14:10:02
1017
原创 Microsoft Build 2025重点速览
在Microsoft Build 2025上,微软CEO纳德拉宣布,WSL(Windows Subsystem Linux),和Copilot Chat将开源利好开源界.jpg。
2025-06-11 20:46:34
766
原创 【F#入门】第五讲 模式匹配
本期内容深入探讨了F#中的模式匹配,这是一种强大的工具,用于分解和判断数据。模式匹配通过定义一系列规则来转换输入数据,F#支持多种模式,包括常量模式、标识符模式、变量模式、OR/AND模式、Cons模式、列表模式、数组模式、记录模式、类型模式和活动模式等。这些模式不仅使业务规则更加清晰,还使得代码更接近问题域的表述,特别是在函数式编程中,模式匹配是递归算法的自然表达方式。通过具体的代码示例,如红黑树的实现,展示了模式匹配如何简化复杂数据结构的操作,使得代码更加简洁和易于理解。模式匹配不仅限于函数式编程,其高
2025-05-08 23:00:34
561
原创 【函数式编程】【C#/F#】第五讲 函数式编程中的错误处理,副作用管理
在上一讲中,我们学习了在函数式编程中一个,非常重要的概念。藉由这个武器,我们将来挑战我们最开始做讲述的概念,代码的副作用。当然,如果你还记得的话,程序的异常也是副作用的其中一种。复习时间:会影响外界状态(状态突变)、使用到了IO(输入输出)的功能、改变输入参数,或是抛出异常叫做副作用如果你觉得有部分知识点已经忘了,可以回顾一下之前的内容【C#/F#】「函数式编程」序章 - 不可变与表达式两大戒律单子在FP之中有一个重要的任务,那就是管控副作用的范围。这也是我们一直想要强调的,副作用在程序中不可避免。
2025-04-16 15:28:08
1125
原创 如何在各种限制(无网/无IDE)条件下编译我们的.NET程序(.NET Core ver.)
NET程序其实也有这么一个隐藏的环节,如果你依赖了nuget包,项目会在还原的时候自动从网络上下载这些包,并缓存在你的本地中。dotnet工具在背后做了非常的多的事,让我们编译看起来变得如此简单,不过我们也需要了解一些他的工作原理,让我们能更好的理解整个过程。VS本来就不是我们必须应该依赖的东西,我们完全可以通过VScode来调试我们的程序,相对VS来说,VSCode足够小巧,也可以不需要麻烦的步骤才能获得离线版,安装插件后,甚至也可以轻松的调试。这就是我们要做的事,这样,我们便可以编译的出我们的代码。
2025-04-06 15:35:03
986
原创 模型上下文协议(MCP)简介,配合DeepSeek开发应用
简单介绍就是,资源就是能提供给llm的上下文,提示词就是llm的提示,工具是服务器提供的工具,采样是一个特殊的功能用于采样提示词,root则是表明应用的工作的范围。简单来说,对于用户来说,MCP是一种简单的工具,可以帮助我们访问各式各样的数据源。在EchoTools.cs文件中,修改代码如下,便实现了我们的加法工具,这和之前SK(语义核心)的工具编写方法非常的像,几乎可以无缝使用。然后你可以填入你的OPENAI的key,如果你想用DeepSeek的话,参考我们之前的内容,就可以轻松的切换到我们想用的模型。
2025-03-31 11:36:13
3109
原创 【OPEN 1+X】零基础向使用Ollama+RAGFlow构建自己本地的AI知识库
简单来说,原本的大模型在考试的时候只能依赖已经学习过的内容进行回答,RAG则相当于让大模型可以开卷作答,即使没有学习过的内容,也可以通过翻书解决。docker相当于一个开箱即用的环境,由项目开发者配置完成后,分发镜像给用户使用,无需关心其具体的运行环境配置,也不会影响计算机自身的环境。最近遇到很多人都对于本地知识库搭建的流程非常有兴趣,故做一个教程,也完成一下Datawhale的视频共建任务,文章前半内容无需编写代码即可完成使用,后半部分会介绍一下如何在应用中与ai进行对话。
2025-03-03 08:50:46
1334
2
原创 【C#/F#】【函数式编程】第三讲:我们应该如何使用记录这个类型?- 数据与逻辑分离
介绍了如何利用记录的不可变性和其它特性,完成准确的数据建模。增强代码健壮性可读性
2025-02-23 10:29:09
880
原创 .NET程序中调用本地部署Deepseek模型进行对话
借由Deepseek的爆火,本文将介绍如何快速的在本地部署大语言模型,并且在.NET程序中调用进行对话。
2025-02-08 09:00:00
2635
原创 Nullable Reference Types为什么会出现在C#之中?
Nullable Reference Types(NRT)出现的本质是为了消除null这个洪水猛兽
2024-12-04 22:44:49
1255
原创 .NET 9中的Json更新
如此便可以导出json的架构文档,如果修改JsonSerializerOptions的配置(注意最好使用new JsonSerializerOptions(JsonSerializerOptions.Default)的方式生成新的default复制后修改) ,也会得到相应的结果。这个就留给读者测试啦~其他还有例如无序元数据的读取,null限制,可选构造参数限制以及其性能优化等就不在本文详细解释了,感兴趣的同学可以在官方博客中看到其更新内容。在新版本中,我们不需要正则或者其他什么的,可以直接这么做。
2024-11-08 15:00:00
1188
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅