gpt4 book ai didi

computer-science - 在 Brainfuck 中实现控制结构

转载 作者:行者123 更新时间:2023-12-04 11:16:24 25 4
gpt4 key购买 nike

对于初学者,Brainfuck是一种图灵完备的语言,只有 8 个命令,所有这些命令在 C 中都有文字等价物:

bf    c
----------------------
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr=getchar();
[ while (*ptr) {
] }

在任何具有包管理器的 Linux 发行版上,您都应该能够找到并安装包 beef ,Brainfuck 口译员,因此您可以在家中一起玩。

正如你在上面看到的,Brainfuck 只有 控制结构, […]将 C 转换为:
while (*ptr) { … }

这使您可以控制 IF VAR = 0 THEN GOTO 10来自 BASIC。以下将调用 getchar()直到它返回 0 :
,    # *ptr = getchar();
[ # while (*ptr) {
>, # *(++ptr) = getchar();
] # }

但是如果我只想读到换行符怎么办 \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 s 或 if/else if s。

最佳答案

我还没有看链接,但我想 AShelly's answer可能更普遍有用……但是,以前不敢让我的手指打出一些 Brainfuck,我决定现在是最好的时机,并且能够获得以下内容,我认为这很有效。

后半部分仅用于打印第一部分捕获的内容。另外,我不会说谎,在尝试解决这个问题后,我的大脑确实感到彻底“操蛋”......一种非常恰当命名的语言,呵呵。

+
[
>,
----------
[
---
[
+++++++++++++
>>
]
]

<
[
>>
]
<
]

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

>
[
.>
]

关于computer-science - 在 Brainfuck 中实现控制结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3421347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com