Đối với người lãnh đạo, Brainfuck là một ngôn ngữ Turing hoàn tất chỉ với 8 lệnh, tất cả đều có tương đương chữ trong C:cấu trúc thực hiện kiểm soát trong Brainfuck
bf c
----------------------
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr=getchar();
[ while (*ptr) {
] }
Trên bất kỳ distro Linux mà có một bộ quản lý gói, bạn nên tìm và cài đặt gói beef
, một thông dịch viên Brainfuck để bạn có thể chơi cùng ở nhà.
Như bạn thấy ở trên, Brainfuck có nhưng một cấu trúc điều khiển, […]
mà dịch để C như:
while (*ptr) { … }
nào cung cấp cho bạn tất cả sự kiểm soát của IF VAR = 0 THEN GOTO 10
từ BASIC. Sau đây sẽ gọi getchar()
cho đến khi nó trả 0
:
, # *ptr = getchar();
[ # while (*ptr) {
>, # *(++ptr) = getchar();
] # }
Nhưng nếu tôi chỉ muốn đọc một char newline \n
? Sau khi có một số khó khăn gói bộ não của tôi xung quanh như thế nào điều này có thể được điều chỉnh để làm việc như một đơn giản if
tôi đã đưa ra như sau:
, # *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;
] # }
(Nếu ai có một cách tốt hơn để làm điều này, xin vui lòng cho tôi biết)
Bây giờ, hãy nói rằng tôi muốn thử nghiệm thoát khỏi vòng lặp đó trên \r
ngoài \n
. Làm thế nào tôi có thể thử nghiệm cho một trong hai, cho rằng tôi chỉ có một cơ hội để thoát ra khỏi vòng lặp? Mục tiêu của tôi là có thể mô phỏng switch
, lồng nhau if
s hoặc if/else if
s.
Có thể có _no_ câu hỏi nghiêm túc về một ngôn ngữ chết não như vậy. Trong thực tế, đó là những gì nó _should_ được gọi là: Braindead :-) – paxdiablo
Bạn thưa bạn, là một người đàn ông dũng cảm. – Pierreten
@SCMadsen Đây là "Hello World": '++++++++++ [> +++++++> ++++++++++> +++> + <<<<-]> ++. > +. +++++++ .. +++.> ++. << +++++++++++++++.>. +++ .------ . +>>.> – NullUserException