编程实践
文章平均质量分 89
MoonBit月兔
这个作者很懒,什么都没留下…
展开
-
8000字都是干货!教你如何用MoonBit实现Haskell求值语义
Haskell,作为一门纯函数式编程语言,有强大的惰性求值机制,这一机制不仅允许开发者编写出更加高效和简洁的代码,而且在处理大型数据集或复杂的数据流时,能提高程序的性能和响应速度。**它可以只在某种数据结构内部提供(例如Java8增加的Stream类型,以及更早的Scheme语言中的stream),也可以将整个语言设计成惰性的(这一思路的代表者是上世纪80年代的Miranda语言以及后来的Haskell与Clean语言)。我们将在下文中展示一种简单的惰性函数式语言的极小实现,并对其背后的理论模型稍做介绍。原创 2024-03-01 17:51:35 · 887 阅读 · 0 评论 -
Snake: MoonBit版贪吃蛇来了!
贪吃蛇(Snake)是起源于1976年的街机游戏 Blockade。此类游戏在1990年代由于一些具有小型屏幕的移动电话的引入而再度流行起来,在现在的手机上基本都可安装此小游戏。版本亦有所不同。在游戏中,玩家操控一条细长的直线(俗称蛇或虫),它会不停前进,玩家只能操控蛇的头部朝向(上下左右),一路拾起触碰到之物(或称作“豆”),并要避免触碰到自身或者其他障碍物。每次贪吃蛇吃掉一个食物,它的身体便增长一些。吃掉一些食物后会使蛇的移动速度逐渐加快,让游戏的难度渐渐变大。原创 2024-02-06 16:52:53 · 973 阅读 · 0 评论 -
用MoonBit实现数独求解器,秒变最强大脑!
上文展示了简单的排除法和暴力搜索可以很快地解决一些数独难题,这并不是说数独是不值得玩的游戏,我想这一事实所揭示的是不必为某个久思不得其解的数独过于介怀。最普通的一种数独在9x9的方格上进行,我们将行(row)从上到下按A-I编号,列(column)从左到右按1-9编号, 这样就得到了网格中每个方格(square)的坐标,例如下面这个网格中数字0对应的坐标是C3。上面这两个函数会对它们所访问的每个方格应用启发式策略,一次成功的启发又会引入对新的方格的访问,让这些策略在网格间尽可能广地传播。原创 2023-12-21 16:22:08 · 758 阅读 · 0 评论 -
1小时学会用MoonBit开发马里奥游戏
嘿👋大家好!今天来讲讲一个好玩的游戏——马里奥游戏!相信不少80、90后的朋友们在小时候都玩过马里奥游戏,对那个戴着红色帽子、穿着蓝色工装背带裤的马里奥叔叔念念不忘。这款游戏自1985年面世以来,就以简单易上手和丰富有趣的情节关卡设计,迅速俘获全球玩家的心。今天,让我们重拾那份童年的情怀~如果你的童年也曾被那魔性的 “灯灯灯灯灯灯灯”旋律洗脑,那就一起来追忆那些美好时光吧!让我们动起手来,用MoonBit创造一个属于自己的“马里奥游戏”吧!原创 2023-12-06 18:15:29 · 1069 阅读 · 1 评论 -
如何用MoonBit实现无类型Lambda演算解释器?
而Lambda演算这一起源于20世纪30年代,出自图灵导师阿隆佐·邱奇之手的形式系统如今已经发展成了蔚为大观的一个大家族,本文将展示其中最基础的一种:无类型Lambda演算(这也是最早阿隆佐·邱奇提出的那种)。subst函数的实现在不用考虑自由变量的情况下简单了许多,只要记录递归到当前位置的深度并且与遇到的变量进行比对,大小相等就是需要替换的目标变量。某种程度上说,德布朗指数的值描述的是变量与对应Lambda的相对距离,此处的距离衡量标注就是中间嵌套的Lambda层数。两个构造器,分别代表计算成功与失败。原创 2023-11-30 10:29:32 · 1018 阅读 · 0 评论 -
编程实践|如何用MoonBit实现二叉堆与配对堆?
1964年,J.W.J Williams的论文"Algorithm 232 - Heapsort"将二叉堆引入了程序世界,之后的几十年中,人们发现这种数据结构在一般性的排序之外也有着不少用处(例如带优先级的任务调度,图算法等),在它的基础上扩展产生的各种变体层出不穷。本文将探讨使用数组实现的二叉堆和使用列表实现的配对堆的工作原理,以及如何使用MoonBit语言实现。顺带一提,MoonBit即将推出的标准库中最早一批可供使用的数据结构就有堆。原创 2023-11-13 10:25:30 · 160 阅读 · 0 评论