HackerTube English?

Conway's Game Of Life in APL

DyalogYouTube ↗

延伸阅读 1

字幕解读

演示用 Dyalog APL 逐步构造 Conway《生命游戏》:把邻域旋转编码为数组变换,通过外积生成邻居计数,再用布尔数组规则求出下一代。整个表达式无需显式循环或临时变量,也不依赖棋盘的固定尺寸;随后将表达式抽象成函数,迭代生成世代,并利用界面更新做动画。演讲还指出边界条件可通过运算符组合改变,从而在环面、无限平面等空间上运行。

自动字幕 · 引文按字幕原文展示,可点时间戳回看片段。

内容要点

  • APL 的数组运算和高阶操作可把邻域计算与规则应用表达为单个数组表达式。
  • 把表达式抽象成参数化函数后,可迭代生成后续世代,并复用在任意棋盘尺寸上。
  • 把生命规则作为操作数传给不同运算符,可以改变空间边界/拓扑,而保留核心规则。
视频章节 6
  1. 将棋盘表示为数组
  2. 旋转邻域并计算邻居数
  3. 应用生命游戏规则
  4. 抽象成可复用函数
  5. 扩展棋盘并制作动画
  6. 改变边界与空间拓扑
具体观点与证据 3

将矩阵沿两个维度旋转并求和,可一次算出所有细胞的邻居计数。

计数包含细胞本身,需与生命游戏通常的八邻居定义区分。

if we sum the vector we see a neighbor count for each cell

APL 的下一代计算可写成无显式循环、无临时变量的单个数组表达式。

并不意味着底层没有迭代或计算成本。

you'll notice that it contains no explicit loops and no temporary variables

旋转实现隐含了边缘回绕,因此模拟的是环面上的生命游戏,而非自动获得无限平面。

Taurus 为字幕对 torus 的转写;其他流形需另写算子。

the way we've coded it with rotations we've produced life on a Taurus
补充字幕原文 2

演示者强调核心数组表达式不需要显式循环或中间变量,且尺寸不写死。

no explicit loops and no temporary variables

生命规则函数可作为运算符的操作数,使同一规则能够适配不同空间边界。

operators that take our life function as an operand
解读边界

这是简短的现场演示,着重展示 APL 表达能力;未比较实现性能或讨论更大规模计算。

Hacker News 评论

查看 HN 原评论 ↗