首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Brainfuck中实现控制结构

在Brainfuck中实现控制结构
EN

Stack Overflow用户
提问于 2010-08-06 06:01:39
回答 3查看 1.3K关注 0票数 8

对于不熟悉的人来说,布莱福克是一种图灵完整的语言,只有8个命令,所有这些命令在C中都有文字等价物:

代码语言:javascript
运行
复制
bf    c
----------------------
>     ++ptr;
<     --ptr;
+     ++*ptr;
-     --*ptr;
.     putchar(*ptr);
,     *ptr=getchar();
[     while (*ptr) {
]     }

在任何有包管理器的linux发行版上,您都应该能够找到并安装包beef,这是一个Brainfuck解释器,这样您就可以在家玩了。

正如您在上面看到的,Brainfuck只有一个控制结构,[…],它将C转换为:

代码语言:javascript
运行
复制
while (*ptr) { … }

这使您可以从BASIC中获得IF VAR = 0 THEN GOTO 10的所有控制权。下面将调用getchar(),直到它返回0为止

代码语言:javascript
运行
复制
,    # *ptr = getchar();
[    # while (*ptr) {
  >,    # *(++ptr) = getchar();
]    # }

但是,如果我只想读给换行符char \n呢?在对如何将其作为一个简单的if进行调整的问题进行了讨论之后,我想出了以下几点:

代码语言:javascript
运行
复制
,            # *ptr = getchar();      /* store input                               */
----------   # *ptr -= 10;            /* test for \n by subtracting 10 before loop */
[            # while (*ptr) {         /* if *ptr == 0, last char read was \n       */
  ++++++++++   # *ptr += 10;          /*   wasn't \n, add 10 back to val under ptr */
  >,           # *(++ptr) = getchar();
  ----------   # *ptr -= 10;
]            # }

(如果有人有更好的方法,请告诉我)

现在让我说,除了\r之外,我还想在\n上测试这个循环的突破。考虑到我只有一次机会打破循环,我如何测试这两种情况?我的目标是能够模仿switch、嵌套ifs或if/else ifs。

EN

Stack Overflow用户

发布于 2010-08-10 05:59:17

这里是为大脑执行基本逻辑但复杂的操作的算法:)

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3421347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档