对于未启动的用户,Brainfuck是一种图灵完备的语言,只有8个命令,所有这些命令在C中都具有文字等效项:
bf c
----------------------
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr=getchar();
[ while (*ptr) {
] }
在任何具有软件包管理器的Linux发行版上,您都应该能够找到并安装软件包
beef
,这是Brainfuck解释器,因此您可以在家中玩。从上面可以看到,Brainfuck只有一个控件结构
[…]
,它转换为C的方式是:while (*ptr) { … }
这使您可以通过BASIC对
IF VAR = 0 THEN GOTO 10
进行所有控制。以下将调用getchar()
,直到返回0
为止:, # *ptr = getchar();
[ # while (*ptr) {
>, # *(++ptr) = getchar();
] # }
但是,如果我只想读取换行符char
\n
怎么办?在将自己的脑筋围绕如何适应简单的if
的工作遇到一些困难之后,我想到了以下内容:, # *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
,嵌套if
或if/else if
。 最佳答案
我还没有看过链接,但我想AShelly's answer可能更通用...但是,由于以前不敢让我的手指敲打Brainfuck,所以我决定现在就好了并能够获得以下内容,我认为这是可行的。
下半部分仅用于打印出第一部分捕获的内容。而且,我不会说谎,在尝试解决这个问题后,我的大脑确实的确感到完全“干”了……一种非常恰本地命名的语言,呵呵。
+
[
>,
----------
[
---
[
+++++++++++++
>>
]
]
<
[
>>
]
<
]
++++++++++++
[
<
]
>
[
.>
]
关于computer-science - 在Brainfuck中实现控制结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3421347/