プログラミング言語を自作できると格好いいよね と思って作ろうとしたものの まっとうなものを作れるだけの知識がないので dcみたいになってしまった。 一応チューリング完全なはず? 以下命令一覧 アルファベットの命令は大文字小文字どっちでもいい。 #: 0をスタックに積む。 0~9: スタックのトップを10倍しその数を足す。 + - * / %: スタックのトップ2つに対して演算してスタックに結果を積む。 ": スタックのトップをポップしポインタが指す位置からその値分読み取りスタックに積む。 $: スタックのトップ2つの文字列を連結。 {: スタックの要素を2つポップし先頭だった要素をインデックス、そうでない要素を文字列として文字列から文字を取りだす。 Z: 文字列の文字数を得る。 V: スタックの先頭の要素をその値の平方根で置き換える。 = < >: スタックのトップ二つに対して比較してスタックに結果を積む。 !: スタックのトップの要素の論理値を反転させる。 論理値じゃない場合の動作は説明が難しい。 J: スタックの先頭の数値分相対ジャンプする。 ラベルなどのような便利なものはないので ジャンプ量は都度手計算しないとだめ。 Lx: 変数xの値をスタックに積む。 xは適当なASCII文字1文字が使用できる。 Sx: スタックの先頭の要素を変数xに格納する。 D: スタックの先頭の要素を複製する。 R: スタックの先頭の要素2つを入れ替える。 O: スタックの先頭の要素を出力する。 : : スタックの要素を2つポップし先頭だった要素をインデックス、そうでない要素を値としてメモリーに格納。 ; : スタックの先頭の要素をインデックスとしてメモリーから読み出してスタックへ積む。 その他の文字: 何も起こらない。
数値を積むとき #1234 などとして # を先頭につけるところがINTERCALっぽい気もする。 例1: 素直なFizzBuzz #0Si#99Li<#93*jLi#1+SiLi#15%!!#16*j#8"FizzBuzzo#50jLi%!!*j"Fizzo%!!*j"Buzzo 例2: スクリプト言語でのコードゴルフでよく見る方法のFizzBuzz +Si#"Li%!!*j"Fizz$Li%!!*j"Buzz$d!!*jLi$oLi<#*j 例3: Quine """r$"#$o 例4: 素数列挙 (最初の1000個まで) ;%!!*j+SiLiLl<#*jLf*jLnoLnLl:Ll+SlLn+SnLl<#*j