从手写递归下降到Parser combinator 这次继续讨论递归下降算法吧。 上次提到的框架基本上就是递归下降的纯函数式编程的实现了,不过,缺点也很显然,首先就是太长,样板代码太多,可读性和可维护性差。上次倒是也提到了。 不过也不难发现,这里重复的模式和样板代码,做的东西基本就是一件事:在纯函数环境下(没有副作用和状态的场合),模拟出「可变状态和副作用」的效果。 比如那个二元组的第二项tokens列表的操作。 又比如逐层嵌套下去的if语句块。 2025-01-27 笔记 #函数式编程 #Parser #递归下降 #Scala
用Scala实现手写的递归下降算法 最近重拾编程语言设计的事情,不可避免的又要遇到写parser的事情了。 想起来,三年前也做过类似的事情,不过那时候是用Haskell写parser combinator,有点知其然而不知其所以然的感觉吧。 这次重拾parser的话,为了能够让自己明白到底代码在干什么,也为了之后可以更好的维护和扩展语法吧,就选择了直接手写递归下降语法。当然,用的是Scala,也尽量保持了纯函数式的风格。不过,在写着 2025-01-18 笔记 #函数式编程 #Monad #Parser #Scala
在Java 8里面实现了简单的「模式匹配」 所以最近其实在做的小实验是试着在Java8里面实现简单的模式匹配功能。也许说是模式匹配更像是Kotlin的when语句吧。 主要因为近期比较多开发和维护基于Java或JS这种经典技术栈的存在代码,然后因为之前的开发者看得出来是写惯了Java8这种上古语言的,所以代码风格很古老,经常会写着写着就想,要是有个模式匹配就好了。 也觉得如果有模式匹配确实会很好玩吧,同时也算是为了实践自己「把Java当作一 2024-12-28 水 #方形轮子 #Java
用Gradle在Maven Central上打包发布了第一个Java Library 最近在做一些Java上面的小试验,然后做到一半突然觉得,似乎可以把这个代码转化为一个target Java 8的库,然后就在想,是不是可以发布到Maven上面呢?这样的话,就可以在别的项目或者让其他人能够用到了呢。 另外一方面,这几年认识的朋友也都有发布过自己的仓库,所以也想试试呢。 于是首先第一步就是把原本的intelliJ生成的只有src的项目转化为符合Gradle文件结构的模样。 这一步大概 2024-11-23 笔记 #Java #Gradle #Maven
刷完UW Programming Languages的一点感想 二月份没有做什么别的项目,主要的时间花在三门Coursera的课上了。确切的说,其实是同一门课:UW的Programming Language课。 这门课是华盛顿大学的CSE341课程的Coursera版本,根据官网的介绍,大概是「简要介绍了编程语言的基本概念,包括抽象(Abstraction mechanisms)、静态和动态类型、作用域、语法(Syntax)和语义(Semantics)、闭包( 2024-03-25 程序设计杂谈 #编程理念 #函数式编程 #OOP
从Kotlin的设计小窥编程语言的组合性 最近在复习Kotlin的协程,偶然在这篇文章里遇到一道有趣的题目,也就稍微做了一下。 题目第一眼看起来还是挺有难度的,要在Kotlin里面实现Haskell那样的do-notation语法。不过,有了前一篇文章的提示,再加上一些Kotlin/Coroutine和函数式编程的基础,倒也不难做。大概的想法是用协程的挂起和恢复来模拟出Monad的组合。具体的细节就不展开了,有兴趣可以自己试试。显然,Op 2024-02-18 程序设计杂谈 #编程理念
Here's a failed attempt to localize my blog I just finished the i18n (internationalization) feature of this blog. A natural continuation of i18n would be L10n (localization), which I sparsely worked during last weeks. But this time, it seems th 2024-01-24 :en:Daily Updates
SwiftData踩坑记(续) 上次提到使用SwiftUI和SwiftData时候的几个问题,后来也陆续解决了。 SwiftUI的「返回」导航 先说第一个关于SwiftUI的问题。 这里实际上我想做的大概是,在创建新数据的过程中,取消创建并且回到主页面。原本的实现是这样的: 123456Button { pathManager.path.removeLast(2)} label: { L 2023-12-13 笔记 #踩坑 #Swift
Swift、SwiftUI和SwiftData的一些坑 (用SwiftUI写小半个月小项目后的一些心得) 最近在用SwiftUI写一个简单的程序,其实一开始只是觉得SwiftUI也许很适合画图,然后发现Swift Charts画图好像很好看,就想画点看起来比较华丽的图表。不知不觉就写多了……然后就把SwiftUI、SwiftData和Swift Charts都用了一遍。 也差不多小半个月的时间,大概写出了第一个版本,感觉是时候总结一下一些Swift、S 2023-12-09 笔记 #踩坑 #Swift #SwiftUI
稍微升级了一下Blog的插件 不知不觉这个Blog也用了一段时间了,一直也算是将就着用的样子。用的是Fluid主题,大体上还是比较满意的。 前段时间把网站从GitHub Pages搬移到了Vercel,相应的,感觉可以做的事情也更多了呢。还是考虑到我自己本身身处欧盟境内,GDPR也总是比较头疼的事情。因为我很讨厌Cookie弹窗,也就想了一下对策。 更新CDN源 首先第一步是检测了一下网站的进出流量,大概可以分为来自中国境内的 2023-11-22 其他 #方形轮子 #踩坑 #Hexo