1L_a/扁平化 1L_a 编程
外观
< 1L a 编程
创建 1L_a 程序的一种方法是先编写相应的 Brainf*** 程序,然后将其转换为 1L_a。因此,是时候引入一种新的语言,扁平化 1L_a,它介于 1L_a 和 Brainf*** 之间。
如你所知,Brainf*** 是一种众所周知的、一维的编程语言。与 1L_a 一样,它也有 DP 和 IP,但 DP 只能在一行上移动,并且 DP 在字符数组上移动,而不是位数组上移动。它是图灵完备的,并且有 8 个指令。以下是这些指令
指令 | 操作 |
---|---|
> | 将 DP 向右移动 |
< | 将 DP 向左移动 |
+ | 增加 DP 指向的内存单元的值 |
- | 减少 DP 指向的内存单元的值 |
. | 输出 DP 指向的字符 |
, | 输入一个字符并将其存储在 DP 所在的单元格中 |
[ | 如果 DP 所在的单元格为 0,则跳过匹配的 ] |
] | 如果 DP 所在的单元格为 0,则跳回匹配的 [ |
然而,作为图灵陷阱(只包含少数指令且图灵完备的语言),8 个指令有点太多了。因此,我们可以创建具有更少指令的 Brainf*** 等效语言。
如果可以在 Brainf*** 中实现该语言中的每个指令,并且可以在该语言中实现 Brainf*** 中的每个指令,那么我们称该语言为 Brainf*** 等效语言。
很明显,我们可以通过对位数组(如 1L_a!)而不是字符数组进行操作,将 Brainf*** 减少到 7 个指令,这样 + 和 - 指令就变成一个指令:切换操作,表示为 @。可以使用强大的流程控制来模拟字符数组,但这会很笨拙,我太懒了,不想这样做。幸运的是,已经有人替我们做好了这件事。
Brainf*** The new language --------- ---------------- > >>>>>>>>> < <<<<<<<<< + >>>>>>>>[<]@>[@>]<<<<<<<<<[@] - @>>>>>>>>@[<@]>[>]<<<<<<<<<[@] [ @[>>>>>>>>@[<@]>[>]<<<<<<<<<[@]>>>>>>>>[<]@>[@>]<<<<<<<<<@[@ ] >>>>>>>>>@<<<<<<<<<]>>>>>>>>>[<<<<<<<<<@>>>>>>>>>@]<<<<<<<<<] . >.< , >,<
我们称这种语言为 Boolf***。由于 Brainf*** 是图灵完备的,并且可以将任何 Brainf*** 程序转换为 Boolf*** 程序,因此 Boolf*** 也是图灵完备的。