Acme-Brainfuck-1.1.1 > Acme::Brainfuck

名前

Acme::Brainfuck - perlコードに埋め込まれたBrainfuck

概要

 #!/usr/bin/env perl
 use Acme::Brainfuck;

 print 'Hello world!', chr ++++++++++. ; 

説明

Brainfuck is about the tiniest Turing-complete programming language you can get. A language is Turing-complete if it can model the operations of a Turing machine--an abstract model of a computer defined by the British mathematician Alan Turing in 1936. A Turing machine consists only of an endless sequence of memory cells and a pointer to one particular memory cell. Yet it is theoretically capable of performing any computation. With this module, you can embed Brainfuck instructions delimited by whitespace into your perl code. It will be translated into Perl as parsed. Brainfuck has just just 8 instructions (well more in this implementation, see "Extensions to ANSI Brainfuck" below.) which are as follows

Brainfuckは、入手可能な最も小さいチューリング完全プログラム言語に関連する。 ある言語がチューリングマシン --1936年、英国の数学者Alan Turingによって 定義されたコンピュータの抽象モデル-- の操作をモデル化できる場合、この 言語はチューリング完全であるという。チューリングマシンは、無限に続く メモリセルの連なりと、ある一つのメモリセルを示すポインタだけから構成される。 しかしこのマシンは、どんなコンピュータ計算の実行も理論的には可能である。 このモジュールを使えば、あなたのperlコードの中に、空白で区切られた Brainfuck命令を埋め込める。それはパースされてPerlに翻訳される。 Brainfuckは、たった8個の命令を持つだけなのだ(この命令より多くのことに ついては後述の"Extensions to ANSI Brainfuck"を参照のこと)。 それは以下の如し。

命令

+ Increment(加算)

Increase the value of the current memory cell by one.

現在のメモリセルに1加える。

- Decrement(減算)

Decrease the value of the current memory cell by one.

現在のメモリセルから1引く。

> Forward(前進)

Move the pointer to the next memory cell.

ポインタを次のメモリセルに移動する。

< Back(後進)

Move the pointer to the previous memory cell.

ポインタを前のメモリセルに移動する。

, Input(入力)

Read a byte from Standard Input and store it in the current memory cell.

標準入力からバイトを読み込み、現在のメモリセルに保存する。

. Output(出力)

Write the value of the current memory cell to standard output.

現在のメモリセルの値を標準出力に書き出す。

[ Loop(繰り返し)

If the value of the current memory cell is 0, continue to the cell after the next ']'.

現在のメモリセルの値が0であるなら、次の']'の後ろのセルから続ける。

] Next(次へ)

Go back to the last previous '['.

直前の'['に戻る。

ANSI Brainfuckへの拡張

This implementation has extra instructions available. In order to avoid such terrible bloat, they are only available if you use the verbose pragma like so:

このモジュールの実装では追加の命令が利用できる。そのようなひどい無用の 膨張を避けるため、以下のようにverboseプラグマを使った場合にのみ 利用可能になっている:

use Acme::Brainfuck qw/verbose/;

The extra instructions are:

追加の命令:

~ Reset

Resets the pointer to the first memory cell and clear all memory cells.

ポインタを最初のメモリセルに置きなおし、メモリセルを全てクリアする。

# Peek

Prints the values of the memory pointer and the current memory cell to STDERR. See also "Debugging" below.

メモリポインタおよび現在のメモリセルの値を標準エラーに出力する。 下記の"Debugging"を参照のこと。

デバッグ

By using the debug pragma like this:

以下のようにdebugプラグマを使う:

use Acme::Brainfuck qw/debug/;

you can dump out the generated perl code. (Caution: it is not pretty.) The key to understanding it is that the memory pointer is represented by $p, and the memory array by @m Therefore the value of the current memory cell is $m[$p].

生成されたperlコードをダンプできる(注意:これは綺麗ではない)。 このダンプを理解する鍵は、メモリポインタは$pで表され、メモリ配列は@mで 表されるということだ。よって、現在のメモリセルの値は$m[$p]となる。

戻り値

Each sequence of Brainfuck instructions becomes a Perl block and returns the value of the current memory cell.

Brainfuck命令の連なりはそれぞれPerlのブロックとなる。そして現在の メモリセルの値を返す。

JABH

 #!/usr/bin/env perl
 use Acme::Brainfuck;
 print "Just another ";
 ++++++[>++++++++++++++++<-]>
 ++.--
 >+++[<++++++>-]<.>[-]+++[<------>-]<
 +.-
 +++++++++.---------
 ++++++++++++++.--------------
 ++++++.------
 >+++[<+++++++>-]<.>[-]+++[<------->-]<
 +++.---
 +++++++++++.-----------
 print " hacker.\n";

Countdown

 #!/usr/bin/env perl
 use strict;
 use Acme::Brainfuck qw/verbose/;

 print "Countdown commencing...\n";
 ++++++++++[>+>+<<-]
 >>+++++++++++++++++++++++++++++++++++++++++++++++<<
 ++++++++++[>>.-<.<-]
 print "We have liftoff!\n";

Reverse

 #!/usr/bin/env perl
 use Acme::Brainfuck qw/verbose/;
 
 while(1)
 {
   print "Say something to Backwards Man and then press enter: ";
   +[->,----------]<
   print 'Backwards Man says, "';
   [+++++++++++.<]<
   print "\" to you too.\n";
   ~
 }

Math

 #!/usr/bin/env perl
 use Acme::Brainfuck;
 use strict;
 use warnings;

 my $answer = +++[>++++++<-]> ;

 print "3 * 6 = $answer \n";

バージョン

 1.1.1 Apr 06, 2004

作者

 Jaldhar H. Vyas E<lt>jaldhar@braincells.comE<gt>

謝辞

Urban Mueller - Brainfuckの生みの親

Damian Conway - 想像を絶する奇妙奇天烈の高みにまでperlを捻ってくれた。

Marco Nippula <http://www.hut.fi/~mnippula/> - このモジュールの いくつかのコードは彼のbrainfuck.plに由来する。

Mr. Rock - http://www.cydathria.com/bf/で素晴らしいBrainfuckチュートリアルを 公開している。サンプルのいくつかはそれらに由来する。

著作権とライセンス

 Copyright (c) 2004, Consolidated Braincells Inc.
 Licensed with no warranties under the Crowley Public License:
 
 "Do what thou wilt shall be the whole of the license."

「汝の欲する所を行うこと 是れぞライセンスの全てとならん」