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」が反転表示になり、プロンプト(アルトを模したアイコン)が現れます。
この状態で追加したい要素をタイプして入力しdo-it(\
キー)を押すと記入した要素を最後に追加されます。
「Insert」は指定した位置への要素の挿入です。「Insert」を押して反転させた状態で、要素を挿入したい場所の要素をクリックして指定すると「Add」と同様にプロンプトが現れるので挿入したい要素をタイプして入力し、do-it(\
キー)します。
「Replace」は指定した範囲の要素の入れ替えです。「Replace」を押して反転させた状態で、入れ替えたい範囲の最初の要素をクリック(要素の上半分が白黒反転)したあと、続けて入れ替えたい範囲の最後の要素をクリック(要素の下半分が白黒反転)してから、プロンプトで入れ替える要素を入力してdo-it(\
キー)します。入れ替える要素はひとつでも構わなくて、その場合は同じ要素を二度クリックします。
「Delete」は指定した範囲の要素の削除です。「Delete」を押して反転させた状態で、削除したい範囲の最初の要素をクリック(要素の上半分が白黒反転)、続けて最後の要素をクリック(下半分が白黒反転)すると、指定された範囲の要素が削除されます。
「Move」は指定した範囲の要素を任意の位置に移動します。
「Push」と「Up」
「Push」と「Up」は、括弧でくくる(新しい配列にする)のと、括弧(ネストした配列)から取り出す操作です。
「Push」を選択して範囲を指定すると、指定した範囲の要素がくくられて表示は()
になります。「Enter」して要素を確認したり「Leave」で元に表示に踊れます。
「Up」はネストした配列の中身を取り出す操作です。ネストした配列がひとつしか無い場合は「Up」を押すと直ちに展開されます。複数ある場合は「Up」を反転させた状態で展開したい配列を選びます。
「Exit」で編集を終了し、編集後の式が評価されます。ちなみにSmalltalk-72の演算は右結合なので3 * 7 + 4
は3 * (7 + 4)
となり、その結果の33
とその後に改行(disp ← 13.
)が出力されます。