5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

BrainFuck <[+-.,]>

1 :BF:02/10/31 06:38
BrainFuckとは
 難解プログラミング言語の一つ。
 オシシメサイトはhttp://www.google.co.jp/
 でも日本語だと情報は皆無に等しいぞ☆
 月刊Interfaceは神の雑誌です。

以下俺的見解
 ・スレッドタイトルに全命令が入る素敵な言語。
 ・1レス内に全命令のリファレンスが入る素敵な言語。
  > ポインタをインクリメント
  < ポインタをデクリメント
  + ポインタが示すメモリ位置のデータをインクリメント
  + ポインタが示すメモリ位置のデータをデクリメント
  . ポインタが示すメモリ位置のデータを出力
  , ポインタが示すメモリ位置のデータに入力
  [ ポインタが示すメモリ位置のデータがヌルなら対応する]までジャンプ
  ] ポインタが示すメモリ位置のデータがヌルじゃないなら対応する[までジャンプ

2 :BF:02/10/31 06:39
んじゃ2getでもしとこうかね

3 :デフォルトの名無しさん:02/10/31 06:41
マイクロBASICみたいな物か。

4 :BF:02/10/31 06:50
@を出力するコードを以下に示しますヨ。
@のアスキーコードは64なので、文字表示用メモリ(おまえらが決めれ)を
64回インクリメントして、.で表示するわけだ。
まずは単純に
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
64回インクリメントー。だせー。
次はループとか使って
>++++++[<++++++++++>-]<++++.
とりあえず月刊Interface2002/9に習って、
1bite目を文字用、2bite目をカウンタ用とす。
んで、カウンタ用にポインタを移動(>)して、6回インクリメント(++++++)
ループに突入([)文字用のメモリにポインタを移して(<)
10回インクリメント(++++++++++)んで、カウンタをデクリメント(>-)する。
これで10*6で60回インクリメントするわけだ。あとは++++と64まで合わせて表示!
出たぜおいアットマーク!ヤフー!ミッションコンプリー!

5 :デフォルトの名無しさん:02/10/31 06:52
>>3
それに近いけど、難解プログラミング言語の名前が指す通り
わざと読みにくくするって魂胆だね。いやらしい。
でもアレだよ。プログラミングのパズル的な面白さを
思い知らせてくれやがる憎いぜあんちくしょうなわけさ。
受け売りだけどね。

6 :BF ◆leSXCx/JO2 :02/10/31 06:54
>>5はmeだけど、まあ別に固定じゃなくてもいいけどSA
つかさ、ワシ今日初めて触ったんですけどさ、
本当に>>5に書いた通り面白いんですってば。
まあ真の面白さはその単純っぷりを活かして激しく特殊な
処理系を作ったりすることらしいけどね。C言語をポインタやっと理解したての
ワシにゃちょっとまだキツイかにゃー。

7 :BF ◆leSXCx/JO2 :02/10/31 06:57
http://esoteric.sange.fi/brainfuck/
とりあえずここからいろいろと落としたりしてみましょうよ。
とりあえずワシはcompiled/win/BFI.exeを使ってマスヨ。
何やらアイコンがゲイツっぷりを発揮してるけど。

8 :デフォルトの名無しさん:02/10/31 07:11
これif文とかどうすればいいんだ?

9 :デフォルトの名無しさん:02/10/31 08:49
むしろMIUシステムみたいであこがれてしまうな、最小限の
インストラクションセットw
つか、この言語に0(またはNULL)はないの?

10 :デフォルトの名無しさん:02/10/31 08:58
>>1読んだだけだけど
これチューリングマッスィーンじゃないの?
>8 if文作ってみた。
[->-<]>[ ]
メモリ[0][+1]をコンペアして同じならカッコ内実行。元の値は完璧破壊。
それよりこれどうやって値コピーすんだ

11 :デフォルトの名無しさん:02/10/31 09:27
>>9
最初は全て0にセットされてるよ

12 :デフォルトの名無しさん:02/10/31 10:39
.NET Frameworkに対応してるの?


13 :デフォルトの名無しさん:02/10/31 10:43
http://www.ecs.soton.ac.uk/~sdh300/stuffage/bf.net/
http://p-nand-q.com/brainfuck.net.htm
http://www.omlettesoft.com/software.php3

14 :デフォルトの名無しさん:02/10/31 18:46
正負判定だけでこんななってしまった
>>>++[<++++++++[<++++++++>-]>-]<<<[>>>+<<<[>[-[>]]>>+[<]<<-]]>>>>[-]<-[<<<->>>[-]]<<[<+>[-]]<


15 :BF ◆leSXCx/JO2 :02/10/31 19:41
それが醍醐味ですよ
つかまったくわからん。

16 :デフォルトの名無しさん:02/10/31 20:30
おもしろそうだね。暇なとき遊んでみよう。

17 :デフォルトの名無しさん:02/10/31 20:38
>>10
値のコピー
[>+>+<<-]
>>[<<+>>-]<<
元の値を消耗して2つの値を作る

18 :デフォルトの名無しさん:02/10/31 20:50
>>1
この言語って、制限付の環境でランダムに配置して実行したら、
進 化 し ま す か ね ?

19 :デフォルトの名無しさん:02/10/31 22:31
す る ん じ ゃ ね え の ?

20 :デフォルトの名無しさん:02/10/31 22:35
>++++++++[<++++++>-]<[>+>+>+<<<-]>[<+++>-]<.>>[<++++>-]<.<---
-----------.>+.<.>+++.<.>>>--[<+++++>-]<.<<.>---------------.

かなり汚いし、全然最適化されていないが、とりあえず、>>1へのメッセージです。
単に文字列作成するだけでも、これ楽しいよ。
とくに、どうしたら最も短くできるとかとか考えると面白いかもよ。

21 :20:02/10/31 22:37
ああ、一つ言い忘れた。文字コードはShift_JIS。

22 :デフォルトの名無しさん:02/10/31 22:39
せめて関数定義かマクロ定義が欲しい
あと、ループ組めるの?

23 :デフォルトの名無しさん:02/10/31 23:22
>>22
あるよ。[]

24 :デフォルトの名無しさん:02/11/01 01:01
Shift-JISが使える処理系がそもそもないよな

25 :デフォルトの名無しさん:02/11/01 01:15
>>24
インタプリタなら一時間もあれば作れると思うが

26 :デフォルトの名無しさん:02/11/01 14:59
Esoteric Topics in Computer Programming
ttp://www.catseye.mb.ca/esoteric/


27 :20:02/11/01 18:05
>>24
ごめん、windowsでインタプリタで走らせていたから、
Shift_JISで作っちゃった…。
nkfなり使って、変換してくれ。

28 :デフォルトの名無しさん:02/11/01 21:58
>>27
うpしろ

29 :デフォルトの名無しさん:02/11/01 23:20
おまいら、七行スレの有志が作ってくれたぞ
http://pc3.2ch.net/test/read.cgi/tech/1033143528/l50

30 :デフォルトの名無しさん:02/11/01 23:43
Ruby!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>BrainFuck

31 :デフォルトの名無しさん:02/11/02 00:02
            .∧_∧  )
            (    ) |
          / f (   _ノ
          \ | |  ~ |                    A_∧
            | |   |   _ _     .' .  ・,‘ <Ru)`y´>.
            /    - ―― = ̄  ̄ ̄`:, .∴, .’ ⊂⊂ )
           /      __   ', ・,‘ '     ⊂⊂__/
          /  ,  ̄ ̄ ――=・, ’   .∴・,‘ '
        /  /             .∴ '
       /  /                _____
     /ヘ/                 /旦/三/ /|
     !_/                 | ̄ ̄ ̄ ̄ ̄|  .|
                         | 松本万歳.|/



32 :BF ◆leSXCx/JO2 :02/11/02 00:10
>>29
おお。7行スレは巡回してるから2乗にうれしいなあ。
さすがにBFonBFは7行じゃ無理だろうけど、他のいろいろな言語でも
試してみようかなあ。なんたって世界一小さいコンパイラを作るために
作られた言語だしな。勉強がてらな。

>>30
BFvsRubyじゃさすがに同意せざるを得ないな(藁

33 :デフォルトの名無しさん:02/11/02 00:44
>>31
超先生か?

34 :デフォルトの名無しさん:02/11/02 00:51
おお,チューリングマシン(に毛が生えたもの)じゃないか。
授業で色々やらされたなあ<チューリングマシン

35 :デフォルトの名無しさん:02/11/02 02:55
これ四則演算とかできるの?
なんか物凄く手間かかりそうだね。

36 :20:02/11/02 05:14
>>28
俺が使ったヤツは、Rubyのだけど、ここにおいてあるやつ。
http://www.cs.auc.dk/~larsch/ruby/
つか、探せばもっと色々見つかると思う。

37 :デフォルトの名無しさん:02/11/02 05:55
Rubyかよ

38 :デフォルトの名無しさん:02/11/02 08:57
+[] って無限ループになる?

39 :デフォルトの名無しさん:02/11/02 11:36
昨晩から BrainFuck の仮想マシンをアプレットで作ってみた。
日本語未対応だけど 256 バイトメモリ搭載だぜ!

http://tool-ya.ddo.jp/~torao/program/archive/brainfuck/index.html

# まだページは作りかけだけど…

40 :BF ◆leSXCx/JO2 :02/11/02 15:48
>>39
カコ(・∀・)イイ!
つかメモリ内容表示むっちゃ便利なんだけど。
わかりやすくなる。BFにとっちゃあるまじき行為だけどな(わ

41 :10:02/11/03 02:27
仕事もせずにこればっかりやってた。
符号無しchar→10進文字列変換。itoa()だな。表示ルーチンはあとで作る・・・
,[>+<-]-[>[>>+>+<<<-]>>>[<<<+>>>-]<[-[-[-[-[-[-[-[-[-[>+<[-]]]]]]]]]]]>
[-<<+<----------[>>+>+<<<-]>>>[<<<+>>>-]<[-[-[-[-[-[-[-[-[-[>+<[-]]]]]]]]]]]>]<<<]

42 :20:02/11/03 05:35
なら、俺はatoi()もどきを作ってみた。ただ、032と必ず三桁にする必要があるんだけどね、、、
067と入力するとCと出力してくれます。たぶん。
++++[>++++[>+++<-]<-]>>>,>,>,<<<[>->->-<<<-]>>>
[>+<-]<[>+++++[>++<-]<-]<[>+++++[>+++++[>++<-]<-]<-]>>>.

43 :20:02/11/03 05:43
ごめん、100の位の計算が間違っていた…。

++++[>++++[>+++<-]<-]>>>,>,>,<<<[>->->-<<<-]>>>
[>+<-]<[>+++++[>++<-]<-]<[>+++++[>+++++[>++++<-]<-]<-]>>>.


44 :デフォルトの名無しさん:02/11/03 06:31
楽しいな、これ...

45 :デフォルトの名無しさん:02/11/03 08:14
>>39
, で文字入力する時はどうやんの?

46 :デフォルトの名無しさん:02/11/03 08:24
>>45
緑色のカーソルが点滅してる黒いところをクリックしてキーを打つ。
エコーバックはないみたい。

47 :デフォルトの名無しさん:02/11/03 09:27
とりあえず>>1>>10>>20がさぼった責任をとること。
ついでに俺もさぼるから責任取ってくれ

48 :サクーシャ:02/11/03 09:32
>>46
エコーバックいれますた
てか exe 版触ってないんでそこらへんどう動かしていいかよーわからん。

まだ Netscape 未確認。実行中にストップとかオスとエラー起きそうな気が。

49 :デフォルトの名無しさん:02/11/03 09:37
>サクーシャ
ASCIIコード表頼む

50 :デフォルトの名無しさん:02/11/03 09:41
>>48
ブレークポイント付けて…

51 :デフォルトの名無しさん:02/11/03 09:44
>>50
ステップ実行を連打するか
自分で作るかだな。
簡単だぜ。

52 :サクーシャ:02/11/03 09:49
>>51
一応コード欄で [Enter] キー押しまくると [ステップ] ボタン連打と同じ
動きになるとおもいます。

53 :サクーシャ:02/11/03 09:52
ゴメソ IE の MS JVM じゃならなかった。[ステップ] ボタンにフォーカス
あてて [Enter] 押しまくりだす。

54 :デフォルトの名無しさん:02/11/03 09:55
>>50
ブレークポイント前にポインタを適当な位置まで動かして , 命令、
文字入力待ちになったところで中断、とか。

55 :デフォルトの名無しさん:02/11/03 10:40
>>39
つか、256 バイトも使い切れない (w

56 :デフォルトの名無しさん:02/11/03 10:43
新人にコンピュータ・リテラシーの基礎を教えるには良い教材ではないかと。

57 :デフォルトの名無しさん:02/11/03 11:02
>>56
言語の名前が新人にはお下劣


58 :デフォルトの名無しさん:02/11/03 11:17
00〜FF までを出力してみるコード

>>++++++++++<++++++++++++++++[<.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+>>.<-]

59 : :02/11/04 02:16


60 :デフォルトの名無しさん:02/11/04 02:28
↑何もしないコード。

61 :デフォルトの名無しさん:02/11/04 03:45
コンパイラ作って。

62 :デフォルトの名無しさん:02/11/04 04:01
>>57
BrainF**k とすれば問題なし。


63 :デフォルトの名無しさん:02/11/04 16:37
高階の機能がほしいな。メモリ上のプログラムを実行する機能。
>を1、<を2とか対応付けて、!でポインタが指す場所から実行とか。
ポインタの退避と復帰もほしいな。

…これらをまずBrainFuckで作ればよいのか?

64 :デフォルトの名無しさん:02/11/04 17:01
SKIコンビネータの方が単純で面白い

65 :デフォルトの名無しさん:02/11/04 17:08
>>64
スレ立てて

66 :デフォルトの名無しさん:02/11/04 17:22
SKIコンビネータ
式::=
k (定数) |
S | K | I |
(式 式)

括弧は適宜省略してよい。E1 E2 E3は ((E1 E2) E3)の略。
これだけで自然数の演算はぜんぶ書ける。

67 :デフォルトの名無しさん:02/11/04 17:33
>>66
ポインタまたはそれに準ずる機能が無いと
プログラミング言語にはなり得ないかと
思うんだがどうなんだろうね

68 :デフォルトの名無しさん:02/11/04 17:36
規則
S x y z = (x z) y z
K x y = x
I x = x



69 :デフォルトの名無しさん:02/11/04 17:47
http://www.cwi.nl/~tromp/cl/lazy-k.html

70 :10:02/11/04 18:12
結構苦戦したけどitoa()でキタ━━━━━━(゚∀゚)━━━━━━ !!!!!

[>+<-]->>+<[>-]>[->>]<<[
[>>+>+<<<-]>>>[<<<+>>>-]<[-[-[-[-[-[-[-[-[-[>+<[-]]]]]]]]]]]>[-<<+<----------
[>>+>+<<<-]>>>[<<<+>>>-]<[-[-[-[-[-[-[-[-[-[>+<[-]]]]]]]]]]]>]<<]
<+[->++++++[<++++++++>-]<.[-]<+]

制約
・ポインタから右はすべてゼロであること
・itoa()といいながらunsigned char

71 :デフォルトの名無しさん:02/11/04 18:49
結構おもろいねこれ。
今、関数呼び出し機能つきインタプリタ作ろうかなと思いつつ
ちんげヲ毟ってるんだけど・・・。

現状のBFの仕様に追加
@関数宣言(ファイル名指定)
^ 関数ポインタを左にシフト
~ 関数ポインタを右にシフト
! ポインタのさしてる関数を実行
関数専用の変数スコープは存在しない。

イメージソース
main.bf
 # 関数宣言
 @tolower.bf #ファイル名指定
 @toupper.bf #ファイル名指定

 ,~!.^!.
 #入力を大文字と小文字で出力するプログラム
 #入力を受け取り(,)、関数ポインタを右に移動(~)して関数実行(!)、そして出力(.)
 #さらに関数ポインタを左に移動(^)して関数実行(!)、出力(.)
tolower.bf
 >+++[<++++++++++>-]<++
toupper.bf
 >+++[<---------->-]<--

どうだろう?
あと、#以降はコメント扱いでいいのかしら?

72 :デフォルトの名無しさん:02/11/04 19:00
コメントや関数があったらもう難解プログラミング言語じゃないがな

73 :デフォルトの名無しさん:02/11/04 19:05
メモリ上のルーチンを実行とかできるなら幅が広がるのだが。

74 :デフォルトの名無しさん:02/11/04 19:20
>>72
確かにそうだ、はじめてインタプリタ作成に成功して浮かれて本質を見失った・・・。スマンコ
<[,.]>これが世界の全て、何も足さない、何も引けない。

75 :デフォルトの名無しさん:02/11/04 19:23
>>74
誤:<[,.]>
正:<[+-,.]>
まつがった。

76 :72:02/11/04 19:45
>>74
いや、難解じゃなくて極少プログラミング言語とかなら
いいんでねえの?

77 :デフォルトの名無しさん:02/11/04 20:42
実用性をもとめてはいけいない

78 :デフォルトの名無しさん:02/11/04 21:14
馬鹿っぽさは追究してもいいかも


79 :ミッション:02/11/04 22:21
初心者御用達 hello, world を最小ステップで作れ

80 :デフォルトの名無しさん:02/11/04 22:33
BrainFuck チップ作ったらめちゃくちゃシンプルな CPU とめちゃくちゃ
大容量 & 高性能なメモリ構成になりそうな気が。

81 :デフォルトの名無しさん:02/11/04 23:01
>>80
つーか、言語そのものがマシン語みたいなもんじゃん。
[と]を即値オペランドの相対条件分岐命令に置き換える程度で十分。

82 :デフォルトの名無しさん:02/11/05 01:25
BF をネイティブコードとする CPU なら設計楽そうだな。

83 :デフォルトの名無しさん:02/11/05 02:10
>>82
機械語はまだ決まってないよ
今のところ、プログラムとデータは完全に別物
統合できたら>>63の言う高階の機能ができる。

84 :デフォルトの名無しさん:02/11/05 02:23
現状だと、プログラムメモリとデータメモリは完全に別物なんだね。
CPU コード作るなら、'+' や '>' をそのまま使えばいいかも

85 :デフォルトの名無しさん:02/11/05 03:02
1つの場所にどのくらい大きい数が入るかも決まっていない。


86 :デフォルトの名無しさん:02/11/05 03:29
入出力の仕様から察すると、8bit でいいんじゃない?

87 :デフォルトの名無しさん:02/11/05 03:44
>>66
Church numeral を使えば定数 k は要らないんじゃねえの?


88 :デフォルトの名無しさん:02/11/05 03:54
>>34
ループ[]があって、自己書き換えがないからだいぶ違うが等価ではある。
ttp://home.wxs.nl/~faase009/Ha_bf_Turing.html
上の証明で使うサブルーチン集↓
ttp://home.wxs.nl/~faase009/Ha_bf_intro.html


89 :デフォルトの名無しさん:02/11/05 05:14
>>87
そだね。
やっぱSKコンビネータの方が単純だし(なんせ2命令しかない)
定義もきっちりしてるし、
データとプログラムを区別なく扱えるから
面白いよ。

90 :デフォルトの名無しさん:02/11/05 05:34
>>89
だったらスレ立ててそっちでやれ

91 :デフォルトの名無しさん:02/11/05 06:33
>>89
まじたててください。
おねがいします。

92 :デフォルトの名無しさん:02/11/05 11:23
関数コールはあると面白いかも。関数というよりサブルーチンだが。

例えば、
( 関数へのポインタ++
) 関数へのポインタ++
! 関数ポインタをコール
; 区切り(returnと、ラベルのようなもの)
とかして、
!!!(!!!!);++++++++++++++++;.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+;
こんな感じに書くっての。

93 :デフォルトの名無しさん:02/11/05 12:09
関数はいらないだろ
元開発者が関数を入れなかったのには理由もあるだろうしな

94 :那由多 ◆F4E74ZBQPA :02/11/05 20:43
>++++++++++[<++++++++++>-]<++++.>
>++++++++++[<++++++++++>-]<+.>
>++++++++++[<++++++++++>-]<++++++++.>
>++++++++++[<++++++++++>-]<++++++++.>
>++++++++++[<++++++++++>-]<+++++++++++.>
>+++++++[<+++++++>-]<-----.>
>++++++[<++++++>-]<----.>
>++++++++++[<++++++++++>-]<+++++++++++++++++++.>
>++++++++++[<++++++++++>-]<+++++++++++.>
>++++++++++[<++++++++++>-]<++++++++++++++.>
>++++++++++[<++++++++++>-]<++++++++.>
>++++++++++[<++++++++++>-]<.>

とりあえず・・・。

95 :名称未設定:02/11/05 21:25
インターフェース スレってあるのだろうか。。

>>93
難解プログラムだからね、、関数は実装系に依存するって感じで。
作成したい人は作成してみるのもいいのかもね。
そういう創造性を産むために実装してないのかも。

96 :デフォルトの名無しさん:02/11/06 00:59
ここまで低レベルなんだったら,やっぱりデータとプログラムを分けないでほすぃ

97 :デフォルトの名無しさん:02/11/06 01:26
関数呼び出しと jump を統一してみるとか。
[ や ] の分岐先を、対応する括弧じゃなくて、 pointer の先にしてみるの。
帰り方は…飛んだときに、 pointer に飛ぶ前の位置を書き込まれるように、とか。

98 :デフォルトの名無しさん:02/11/06 02:34
チューリング互換ということは、再帰関数も計算できるんだよねえ。
どうやるんだろう。

99 :デフォルトの名無しさん:02/11/06 02:47
↓このインタプリタで動作確認済みShift-Jis環境用BF
ttp://pc3.2ch.net/test/read.cgi/tech/1033143528/546

>+++++[>+++[<<+++++++++++++>>-]<-]
>+++++[>++++[<<+++++++++++>>-]<-]<++>
>++++++[>++++++[<<+++++>>-]<-]<+++>>
>++++[>++++[<<++++++++>>-]<-]<++++>
>++++[>+++++++[<<++++++>>-]<-]<++>
>+++++[<++++++++>-]>+++++[>+++++[<<
++++++++>>-]<-]<+++++>>++++[>++++[<<
++>>-]<-]>+++[<++++>-]<+>++++++++++[
<<<<<<<<<<.>.>.<<---.+++>>>+++++[>.>.<<-]>>>
.<<<<<+.>>>---.+++>>>.<<<<<<.->>>>>+.-
<<<+++++[>.>.<<-]>>>>>
.+>>>+++[<<<.>>>-]<<<->.---.+++>-]

にして、7行スレの奴らはすげーな。
まじめに俺様インタプリタ作ったら400行近くいっちまったよ。
さて、寝るか。

100 :デフォルトの名無しさん:02/11/06 05:53
>>98
今のところ思いつくのはBFで書いたUTMの上でコードすることだけだなあ


38 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)