Piet

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

Ook! などのいくつかの難解プログラミング言語を開発した (David Morgan-Mar) がピエト・モンドリアンの作品に影響を受けて考案した言語で、文字ではなく色を組み合わせて記述する。 サンプルソースコードサンプルソースコードを一見すると、モンドリアンの『赤・青・黄のコンポジション (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つスタックから取り出し、2番目の値が1番目の値より大きければ1、そうでなければ0をスタックに詰める。
 pointer  値を1つスタックから取り出し、その値の回数だけDPを時計回りに回転させる。取り出した値が負の場合は反時計回りになる。
 switch  値を1つスタックから取り出し、その値の回数だけCCを反転させる。
 duplicate  スタックの先頭の値をコピーして、スタックに詰める。
 roll  値を2つスタックから取り出し、1番目に取り出した値の「回数」だけ、2番目に取り出した値の「深さ」への "roll" 操作を、残ったスタックの要素に対して行う。ここで、深さ n への "roll" 操作とは、スタックの先頭の値を取り出して先頭から n 番目に挿入し、それより手前にある要素の順序を1ずつ繰り上げる操作である。「回数」が負の場合は逆向きの操作となる。「深さ」が負の場合はエラーとなり、この命令は無視される。
 in  標準入力から値を取得する。 数値の入力と文字の入力は命令語が異なる。
 out  標準出力へ値を出力する。 数値の出力と文字の出力は命令語が異なる。

 脚注 

 外部リンク 

DM's Esoteric Programming Languages - Piet - Pietの仕様

Category:難解プログラミング言語