この疑似言語は、アルゴリズムやデータ構造を学ぶために設計された教育用の言語です。以下に基本的な構文と機能を紹介します。
整数型/実数型/文字列型/真偽値
の変数宣言x{}
のように表記します入力(a,b)
で複数変数への入力出力(...)
と 改行()
で表示if/elseif/else/endif
(then は不要)for/endfor
, while/endwhile
, repeat/until
反復(cond)/反復終わり
によるループレコード型 T ... レコード型終わり
T ポインタ x
と 新規 T
による動的メモリNIL
値手続き NAME(...)/手続き終わり
、関数 NAME(...)/関数終わり
、MAIN()
の自動実行エラーが発生した場合は、行番号と該当行が表示されます。詳しくはインタープリターのソースコードを参照してください。
以下は、インタプリタで動かせるサンプルです。コピーして インタープリター に貼り付けてみましょう。
配列の中の数字をすべて足し合わせます。
整数型: A{}
A ← {3, 1, 4}
手続き MAIN()
整数型: i, sum
sum ← 0
for (i ← 0; i < A.length; i ← i + 1)
sum ← sum + A[i]
endfor
出力("合計は", sum)
手続き終わり
先頭に数字を追加してから順番に表示します。
レコード型 Node
整数型 data
Node ポインタ next
レコード型終わり
Node ポインタ head
手続き ADD_FIRST(整数型 x)
Node ポインタ n
n ← 新規 Node
n.data ← x
n.next ← head
head ← n
手続き終わり
手続き PRINT_LIST()
Node ポインタ p
p ← head
反復 (p != NIL)
出力(p.data)
p ← p.next
反復終わり
手続き終わり
手続き MAIN()
head ← NIL
ADD_FIRST(3)
ADD_FIRST(5)
ADD_FIRST(7)
PRINT_LIST()
手続き終わり
後入れ先出しの入れ物です。最後に入れたものから取り出します。
整数型: stack{}
整数型: top
手続き PUSH(整数型 x)
top ← top + 1
stack[top] ← x
手続き終わり
手続き POP()
if (top < 0)
出力("空です")
else
出力(stack[top])
top ← top - 1
endif
手続き終わり
手続き MAIN()
top ← -1
PUSH(10)
PUSH(20)
POP()
POP()
POP()
手続き終わり
先入れ先出しの入れ物です。入れた順に取り出します。
整数型: Q{}
整数型: front, rear
手続き ENQUEUE(整数型 x)
Q[rear] ← x
rear ← rear + 1
手続き終わり
手続き DEQUEUE()
if (front == rear)
出力("空です")
else
出力(Q[front])
front ← front + 1
endif
手続き終わり
手続き MAIN()
front ← 0; rear ← 0
ENQUEUE(1)
ENQUEUE(2)
DEQUEUE()
DEQUEUE()
DEQUEUE()
手続き終わり
配列を先頭から順に調べて値を探します。
整数型: A{}
A ← {3, 8, 2, 7}
整数型: i, target
真偽値: found
target ← 7
found ← 偽
for (i ← 0; i < A.length; i ← i + 1)
if (A[i] == target)
出力("見つかった")
found ← 真
endif
endfor
if (found == 偽)
出力("見つからない")
endif
並んでいる配列を半分ずつ調べて値を探します。
整数型: A{}
A ← {1, 3, 5, 7, 9}
整数型: left, right, mid, target
真偽値: found
target ← 7
left ← 0
right ← A.length - 1
found ← 偽
while (left <= right && found == 偽)
mid ← Math.floor((left + right) / 2)
if (A[mid] == target)
found ← 真
elseif (A[mid] > target)
right ← mid - 1
else
left ← mid + 1
endif
endwhile
if (found)
出力("見つかった")
else
出力("見つからない")
endif
1 から n まで掛け合わせる計算です。
手続き FACT(整数型 n)
整数型: i, ans
ans ← 1
for (i ← 1; i <= n; i ← i + 1)
ans ← ans * i
endfor
出力(ans)
手続き終わり
手続き MAIN()
FACT(5)
手続き終わり
前の2つを足して次の数を作ります。
手続き FIB(整数型 n)
整数型: a, b, i, tmp
a ← 0; b ← 1
for (i ← 0; i < n; i ← i + 1)
出力(a)
tmp ← a + b
a ← b
b ← tmp
endfor
手続き終わり
手続き MAIN()
FIB(5)
手続き終わり
隣同士を比べて並べ替えます。
整数型: A{}
A ← {5, 3, 1, 4, 2}
整数型: i, j, tmp, n
手続き BUBBLE()
n ← A.length
for (i ← 0; i < n - 1; i ← i + 1)
for (j ← 0; j < n - i - 1; j ← j + 1)
if (A[j] > A[j+1])
tmp ← A[j]
A[j] ← A[j+1]
A[j+1] ← tmp
endif
endfor
endfor
手続き終わり
手続き MAIN()
BUBBLE()
for (i ← 0; i < A.length; i ← i + 1)
出力(A[i])
endfor
手続き終わり
一番小さい値を順に選んで並べ替えます。
整数型: A{}
A ← {4, 1, 3, 2}
整数型: i, j, min, tmp
手続き SELECTION()
for (i ← 0; i < A.length - 1; i ← i + 1)
min ← i
for (j ← i + 1; j < A.length; j ← j + 1)
if (A[j] < A[min])
min ← j
endif
endfor
tmp ← A[i]
A[i] ← A[min]
A[min] ← tmp
endfor
手続き終わり
手続き MAIN()
SELECTION()
for (i ← 0; i < A.length; i ← i + 1)
出力(A[i])
endfor
手続き終わり