5

我正试图围绕编程语言Hexagony。我查看了一些示例程序,并尝试编写一个简单的程序来读取 input 和 print Hey [input]!。这就是我所拥有的。

     , < . . C $ 
    . . { . # . ; 
   . . . # . . 2 ' 
  . . . . # C 3 < . 
 . # . # . . * . ; . 
. E . . E . ; . . > / 
 = . . . } y . . 3 .
  . . . . ; . . 3 .
   . . . e $ . ; .
    . . ; . . @ .
     . H . . > &

在线尝试!

如果没有输入,它会Hey !按预期打印。但是对于任何输入,它都会打印EE!. 我很确定我的问题是我不明白内存指针如何在六边形网格上工作。如果输入的字符串太多,我假设我的代码存在过度写入值的问题,但我目前还不关心这一点。{我对使用and命令选择哪个边缘的确切规则}以及 MP 的方向如何受此影响感到困惑。

如果有人可以更明确地解释记忆是如何工作的,那么 MP 如何以一种转变为导向,将不胜感激

4

1 回答 1

7

这是内存移动命令如何工作的图表:

在此处输入图像描述

内存指针 (MP) 有一个位置(它是内存网格的边缘)和沿该边缘的方向。在图中,MP 的初始位置用红色箭头标记,因此它当前指向北方。

MP 移动命令总是相对于 MP 的当前位置和方向。我已经根据哪个命令让你到达那里注释了四个相邻的边缘。例如,{将 MP 向前和向左'移动,然后向后和向右移动。

要确定它的新方向,您可以将此运动视为将 MP 围绕其中一个相邻的六边形旋转 60 度。因此,根据选择的命令,MP 将指向上图的以下方向:

Cmd   Orientation
{     north west
}     north east
"     north east
'     north west

此外,以防这是混淆的一部分,请记住记忆网格独立于源网格(所以这些不是包含命令的网格的边缘......它只是一个单独的、无限的六边形网格) .

至于您的实际程序,它似乎比内存布局有更大的问题。最重要的是,我不确定它们#在那里做什么:#根据当前内存值模 6 切换到 6 个 IP 之一。假设您的输入是任意的,这基本上会将您切换到一个随机 IP,这可能是不是你想要的。

我强烈推荐试用 Timwi 的EsotericIDE(我也用它来生成上面的图表),它允许您逐步完成程序并包含内存网格的可视化。

如果您对语言有任何其他问题,我也很乐意在这个 SE 聊天室为您提供帮助。

于 2018-01-16T11:54:55.480 回答