外部プログラムをロードすることで前回はコンパイラが使える、前々回はアセンブラが使えると喜びました。しかしuLisp半端ないです。実はエディタはビルトインです。入力したLisp関数を実行環境内で編集可能っと。コマケー修正ならばホストに戻らずとも可能。でも編集メンドイよ。年寄じゃないと使えない?
※Lispと一緒 投稿順 index はこちら
※実機確認は Raspberry Pi Pico2で行ってます。
※使用させていただいとります uLisp のバージョンは 4.6b (Arm用)です。
uLispのedit、エディタ関数
uLisp 4.6bにはビルトインのエディタ関数が備わってます。edit とな。これにより入力した自前関数の修正が可能です。ただし「スクリーンエディタ」ではありません。太古の時代の「ラインエディタ」に近い感覚です。それどころかLispのS式の中を car をあらわす aキー と cdr をあらわす dキーではい回るクセ強なオペレーションです。大昔は「伝送線路のノイズみたい」などといわれたコマンド体系を持つエディタを皆使っていた記憶。スクリーンエディタ以前から計算機している年寄には耐性があるんじゃないかと思います。最近の若者、いや中年もぶち切れそう? まあ、呼吸するようにS式を紡げる兄貴姉貴には何の問題もないでしょう。
uLisp標準のビルトインされているエディタの使用方法の解説ページが以下に。
なお、T-Deckという「かっちょいい表示とキーボード付きマシン」では上記より格段にスマートなエディタ(ほぼスクリーンエディタ風)を使えるみたいですが、残念ながら当方手持ちのPico2上のuLisp実装では使えませぬ、念のため。
エディタ関数起動後のオペレーションは以下のごとし。
-
- Enterでtree内の現在位置を表示。
- aでtreeのcar部、dでcdr部へ進む。bでバック。qでエディタから抜ける。
- rXXXでカレント位置をXXXで置換。cYYYでカレント位置にYYYを追加、
xでカレント位置のセル削除。
こんだけです。なお、コマンド送信時の行末はLFにしておけ、だそうです。
ぐだぐだな編集例
練習用の関数の定義が以下に
(defun myadd(arg) (+ arg 7))
上記を編集するためには以下です。
(edit 'myadd)
-
- +を*に書き換える操作(ステップ・バイ・ステップ)
編集コマンド(黄色っぽく色ヌリ)は全て1文字づつ(一度に複数文字入れても可だケド)、途中経過は全て表示(表示しなくても良いケド)、ということで (+ arg 7)の+を*に変更したところが以下に。
関数treeの根っこから ddaa で’+’へたどり着き、そこで r* とリプレース。すると+が*に変更されます。そこで q で完了しても良いのだけれど上記では一歩一歩後ずさりして関数が書き換わっているのを確かめてみてます。
myaddといいつつ、内部は掛け算に書き換わっているので結果は49と。
-
- c (CONS) で追加する例
以下では (+ add 7)の addの後、7の前にConsで1を追加してみてます。途中経過はよしなに。
-
- 追加した1を削除の例
変更、追加、削除ができれば何でもできる。まあ、ソースコードと編集とアップロードできる環境あればホスト側で修正してアップロードする方がお楽だけれども。