コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

Piet

出典: フリー百科事典『ウィキペディア(Wikipedia)』
Piet
パラダイム 構造化プログラミング
設計者 David Morgan-Mar
型付け なし
主な処理系 PietDev, npiet, Piet::Interpreter
ウェブサイト DM's Esoteric Programming Languages - Piet
テンプレートを表示
「Piet」と表示する Piet プログラムコード
Pietで記述したHello worldプログラム

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つスタックから取り出し、2番目の値が1番目の値より大きければ1、そうでなければ0をスタックに詰める。
pointer
値を1つスタックから取り出し、その値の回数だけDPを時計回りに回転させる。取り出した値が負の場合は反時計回りになる。
switch
値を1つスタックから取り出し、その値の回数だけCCを反転させる。
duplicate
スタックの先頭の値をコピーして、スタックに詰める。
roll
値を2つスタックから取り出し、1番目に取り出した値の「回数」だけ、2番目に取り出した値の「深さ」への "roll" 操作を、残ったスタックの要素に対して行う。ここで、深さ n への "roll" 操作とは、スタックの先頭の値を取り出して先頭から n 番目に挿入し、それより手前にある要素の順序を1ずつ繰り上げる操作である。「回数」が負の場合は逆向きの操作となる。「深さ」が負の場合はエラーとなり、この命令は無視される。
in
標準入力から値を取得する。 数値の入力と文字の入力は命令語が異なる。
out
標準出力へ値を出力する。 数値の出力と文字の出力は命令語が異なる。

脚注

[編集]

外部リンク

[編集]