首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-10 05:49:44

我还没有看过链接,但我想阿瑟利的回答可能是更普遍的useful...however,因为我之前不敢用手指键入一些Brainfuck,所以我决定现在是最好的时机,并且能够得到以下内容,我认为这是可行的。

下半部分只是为了打印出第一部分所捕捉到的内容。而且,我也不会说谎,我的大脑在试图解决这个问题后,确实感到“完蛋”.一种非常贴切的语言,呵呵。

代码语言:javascript
运行
复制
+
[
    >,
    ----------
    [
        ---
        [
            +++++++++++++
            >>
        ]
    ]

    <
    [
      >>
    ]
    <
]

++++++++++++
[
    <
]

>
[
    .>
]
票数 3
EN

Stack Overflow用户

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

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

票数 4
EN

Stack Overflow用户

发布于 2010-08-10 05:12:55

有关如何从单一BF控制结构开始并定义一系列表示更复杂操作的越来越复杂的序列的说明,请参见此页

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

https://stackoverflow.com/questions/3421347

复制
相关文章

相似问题

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