Smalltalk-72で学ぶOOPの原点:組み込みの構造化エディター(Add、Insert、Replace、Delete、Move、Up、Push)

アラン・ケイの“オブジェクト指向”というアイデアをもとに(非同期処理などいろいろ足りていないながらも──)比較的忠実に実装された1970年代の非常に古いSmalltalk-72で遊んでみるシリーズです(なお最新のSmalltalkについては Pharo などでお楽しみください!)。他の記事はこちらから→Smalltalk-72で学ぶOOPの原点 Advent Calendar 2019 - Qiita


組み込みの構造化エディター(Enter、Leave、Exit)の続き)

「Add」「Insert」「Replace」「Delete」「Move」

「Add」は最後に要素を追加するときに使います。「Add」をクリックするか、編集中の要素のどれかを2度クリックすると(うまくマウスクリックを受け付けると)「Add」が反転表示になり、プロンプト(アルトを模したアイコン)が現れます。

f:id:sumim:20191214234635p:plain
「Add」モード

この状態で追加したい要素をタイプして入力しdo-it(\キー)を押すと記入した要素を最後に追加されます。

f:id:sumim:20191214235024p:plain
追加したい「+ 6」をタイプして入力してdo-it(\キー)

f:id:sumim:20191214235213p:plain
「+ 6」が追加される

「Insert」は指定した位置への要素の挿入です。「Insert」を押して反転させた状態で、要素を挿入したい場所の要素をクリックして指定すると「Add」と同様にプロンプトが現れるので挿入したい要素をタイプして入力し、do-it(\キー)します。

f:id:sumim:20191214235643p:plain
「Insert」→クリックで挿入位置指定→挿入したい要素をタイプして入力→do-it(「\」キー)

f:id:sumim:20191214235912p:plain
指定した場所に「+ 5」が挿入される

「Replace」は指定した範囲の要素の入れ替えです。「Replace」を押して反転させた状態で、入れ替えたい範囲の最初の要素をクリック(要素の上半分が白黒反転)したあと、続けて入れ替えたい範囲の最後の要素をクリック(要素の下半分が白黒反転)してから、プロンプトで入れ替える要素を入力してdo-it(\キー)します。入れ替える要素はひとつでも構わなくて、その場合は同じ要素を二度クリックします。

f:id:sumim:20191215001039p:plain
「Replace」→範囲を二度クリックして指定→入れ替えたい要素を入力してdo-it(「\」キー)

f:id:sumim:20191215001254p:plain
「+ 5」が「* 7」に置き換わる

「Delete」は指定した範囲の要素の削除です。「Delete」を押して反転させた状態で、削除したい範囲の最初の要素をクリック(要素の上半分が白黒反転)、続けて最後の要素をクリック(下半分が白黒反転)すると、指定された範囲の要素が削除されます。

f:id:sumim:20191215001652p:plain
「Delete」→削除したい範囲をクリックして指定

f:id:sumim:20191215001807p:plain
「+ 6」が削除される

「Move」は指定した範囲の要素を任意の位置に移動します。

f:id:sumim:20191215002128p:plain
「Move」→動かしたい範囲を指定(上半分、下半分が白黒反転)→移動先をクリック

f:id:sumim:20191215002313p:plain
「+」の位置に「* 7」が移動

「Push」と「Up」

「Push」と「Up」は、括弧でくくる(新しい配列にする)のと、括弧(ネストした配列)から取り出す操作です。

「Push」を選択して範囲を指定すると、指定した範囲の要素がくくられて表示は() になります。「Enter」して要素を確認したり「Leave」で元に表示に踊れます。

f:id:sumim:20191215003018p:plain
「Push」→範囲を指定すると要素がくくられる

f:id:sumim:20191215003143p:plain
くくられた要素群は「()」表示に変わる

「Up」はネストした配列の中身を取り出す操作です。ネストした配列がひとつしか無い場合は「Up」を押すと直ちに展開されます。複数ある場合は「Up」を反転させた状態で展開したい配列を選びます。

f:id:sumim:20191215005406p:plain
ネストした配列がひとつしかないときは「Up」をクリックするとただちにそれが展開される

f:id:sumim:20191215005242p:plain
くくられていた「3 * 7」が展開される

「Exit」で編集を終了し、編集後の式が評価されます。ちなみにSmalltalk-72の演算は右結合なので3 * 7 + 43 * (7 + 4)となり、その結果の33とその後に改行(disp ← 13.)が出力されます。

f:id:sumim:20191215005804p:plain
「Exit」で編集を終了し評価結果が返される

f:id:sumim:20191215005921p:plain
結果の「33」と改行(disp ← 13.)が出力される

組み込みの構造化エディター(定義済みアクションやクラスの編集)に続く)