Piet

提供: miniwiki
2018/8/19/ (日) 20:02時点におけるAdmin (トーク | 投稿記録)による版 (1版 をインポートしました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索
Piet
パラダイム 構造化プログラミング
設計者 David Morgan-Mar
型付け なし
主な処理系 PietDev, npiet, Piet::Interpreter
ウェブサイト DM's Esoteric Programming Languages - Piet
テンプレートを表示
ファイル:Piet Program.gif
「Piet」と表示する Piet プログラムコード

Piet(ピエト)は、プログラミング言語であり、難解プログラミング言語のひとつである。

Ook! などのいくつかの難解プログラミング言語を開発した David Morgan-Mar がピエト・モンドリアンの作品に影響を受けて考案した言語で、文字ではなく色を組み合わせて記述する。 サンプルソースコード[1]を一見すると、モンドリアンの『赤・青・黄のコンポジション (1930)』のような抽象画のように見える。

言語仕様

Pietでは、有彩色18色(色相6段階×明度3段階)と無彩色2色()の計20色が用いられる。画像上では、色相明度の変化の度合いによって命令や定義が表され、同一色のかたまり(codel)の面積によって値(正の整数値)が表される。データの処理はスタックを用いて行う。

実行の際は、インタプリタがソースコードの画像上を移動しながら、画像上に表現された命令を解釈して実行する。インタプリタは、移動方向を示す "direction pointer" (DP) および次のcodelの探索方向を示す "codel chooser" (CC) をもつ。DPは4値(上下左右)、CCは2値(左右)をとる。

Pietの命令の一覧を下記に示す。

明度の変化
色相の変化 変化無し 1段階変化 2段階変化
変化無し push pop
1段階変化 add subtract multiply
2段階変化 divide mod not
3段階変化 greater pointer switch
4段階変化 duplicate roll in (number)
5段階変化 in (char) out (number) out (char)
  • push:値をスタックに詰め込む。
  • pop:値をスタックから取り出す。
  • add:値を2つスタックから取り出し、加算した結果をスタックに詰める。
  • subtract:値を2つスタックから取り出し、2つ目の値から1つ目の値を減算した結果をスタックに詰める。
  • multiply:値を2つスタックから取り出し、乗算した結果をスタックに詰める。
  • divide:値を2つスタックから取り出し、2つ目の値を1つ目の値で除算した結果をスタックに詰める。
  • mod:値を2つスタックから取り出し、2つ目の値を1つ目の値で除算した際の余りをスタックに詰める。
  • not:スタックの一番上の値が0でなければ0、0であれば1に変更する。
  • greater:値を2つスタックから取り出し、二番目の値が一番目の値より大きければ1、そうでなければ0をスタックに詰める。
  • pointer:値を1つスタックから取り出し、その値の回数だけDPを時計回りに回転させる。取り出した値が負の場合は反時計回りになる。
  • switch:値を1つスタックから取り出し、その値の回数だけCCを反転させる。
  • duplicate:スタックの先頭の値をコピーして、スタックに詰める。
  • roll:値を2つスタックから取り出し、1番目に取り出した値の「回数」だけ、2番目に取り出した値の「深さ」への "roll" 操作を、残ったスタックの要素に対して行う。ここで、深さ n への "roll" 操作とは、スタックの先頭の値を取り出して先頭から n 番目に挿入し、それより手前にある要素の順序を1ずつ繰り上げる操作である。「回数」が負の場合は逆向きの操作となる。「深さ」が負の場合はエラーとなり、この命令は無視される。
  • in:標準入力から値を取得する。 数値の入力と文字の入力は命令語が異なる。
  • out:標準出力へ値を出力する。 数値の出力と文字の出力は命令語が異なる。

脚注

外部リンク