是的,在这篇文章发出的时候,我已经在准备抛弃 halo 博客平台了。2023年后半页,我在 halo 上投入了相当多的时间,在今年年初,我发现这个平台不适合我,决定自己开发一个 SSG 工具。

尽管我手上有很多存货了,但是今后很长时间还是会停止更新,直到我完成这个 SSG 工具的开发。


很久没有记录过想学习和了解的东西了,这里就简单记录一下吧。

2024.7.2

今天考完高等数学下册,晚上研究如何用MC红石电路实现译码器,看着《数字逻辑电路》,觉得手动去化简表达式太麻烦了,就想着用计算机实现这个事情。
思考中想到了几点:

  1. 表达式字符串用应该按照何种范式书写?
  2. AST怎么完成?
  3. 整个系统应该输出什么?
  • 对于第一点,我暂时不知道有没有什么标准做法,不过我观察了逻辑表达式的结构:任何一个表达式都可以被拆分成最小的操作数(输入值)和操作符,操作符有且仅有“与”,“或”,“非”。
  • 对于第二点,我目前只听说过梯度下降法
  • 第三点,因为在MC中尝试在平面上搭建逻辑电路,验证过一些函数,所以认为输出的结构除了是化简好的逻辑电路,还可以是被切片的MC中的搭建图

思考:

  • 经过验证,MC中最简单,最快的逻辑函数是:“或”,仅用A,B输入代表的红石线相连后引出即可表式逻辑,所以最理想的表达式应该全部转换成最简或与式,其中,“与”的部分可以进一步通过德·摩根定律来转换成“与”和“非”逻辑,这样就可以实现AST到最终产物(红石电路)的对应。
  • 传统形式的逻辑函数化简在计算机中是一个比较复杂的问题,就算在现实中,人们也要依靠化简者的经验和技巧2,所以这里为了实现自动化简,需要用到卡诺图之类的办法,对于计算机而言,在矩阵中按照化简规则进行搜索是比较容易的事情。不过卡诺图并不适合计算机处理,这里要用到奎因-麦克拉斯基算法,下面摘录一段Wikipedia的介绍:

它在功能上等同于卡诺图,但是它具有文字表格的形式,因此它更适合用于电子设计自动化算法的实现,并且它还给出了检查布尔函数是否达到了最小化形式的确定性方法。

  • 与此同时,《我的世界》中的红石传输速度十分缓慢,可能出现竞争冒险现象3。这个问题目前只是停留在猜想中,还没有进行实验。如果确有此事,就要在逻辑表达式化简中加入一个约束条件,生成有多余项的表达式,来保证逻辑电路的稳定性。是否存在竞争冒险现象可以从卡诺图中是否出现两个包围圈之间相切而不相交4来判断。

  1. 《数字逻辑电路》ISBN: 978-7-302-52594-3

  2. 化简者的经验和技巧出自上书第38页最下方文字

  3. 竞争冒险现象见上书第95页

  4. 两个包围圈之间相切而不相交出自上书第96页偏下方文字