LoginSignup
10
6

More than 5 years have passed since last update.

旅のお供にCommon Lisp

Last updated at Posted at 2018-12-20

2018年LISPアドベントカレンダー21日目の投稿です。

ちょっとした空き時間(新幹線での移動など)に、ふとS式を書きたくなった、ということはありませんか?私は時々あります。本格的にプログラムを書く訳ではないのですが、ちょっとしたアイデアを書き留めておきたい、と言った場合です。

先日、出張で新幹線に乗っている時間に、androidタブレットのCommon Lispで時間を潰していたら、結構いい感じだったので紹介したいと思います。

環境

上に書いたように環境はandroidタブレットです。

端末:Nexus7(2013)
OS: android6
アプリ: CL REPL

CL REPLはGoogle Playからインストールすることができます。

CL REPL

Google Playの説明を引用します。

A Common Lisp REPL with command line and history, plus a simple editor with syntax highlighting, simple visual paren-matching, basic auto-completion, a file dialog for opening/saving files, and a simple debug dialog.
It uses the ECL implementation for the Lisp side, and Qt5/QML for the UI.

ウェブサイトは次になります。

パスにEQL5-Androidとあるので、EQL5をAndroidに移植したと思われますが、EQL5とは
何でしょう?いろいろたぐって行くと上位にありました。

Embedded Qt Lisp (Qt5 binding embedded in ECL, embeddable in Qt)

とあるので、Common Lisp処理系はECLになります。

使ってみよう

起動すると次の画面になります(キーボードは英語に変更させて使っています)。

top .png

上の広いウィンドウ、中ほどの一行ウィンドウ、下の薄紫ウィンドウと三つの部分からなります。キーボードはあくまで入力用に薄紫のウィンドウに重なっているだけです。上のウィンドウは通常のエディタのバッファになります。一行ウィンドウは評価用の入力部、薄紫のウィンドウはその評価結果を表示するウィンドウになります。パッと見ると、()がキーボードと独立で表示されているのが目に付きます。()はキーボードのモード(英字/記号)に関わらず入力できるので、Lisp用に作られている感が伝わってきます。

(+ 1 2 3)と入力したところは以下になります。<<>>が一行ウィンドウの下に表示されていますが、これは入力ヒストリを利用するものです。<<はprevious、>>はnextになります。

input-1.png

エンターキーを入力すると結果が下のウィンドウに表示されます。

result-input1.png

もっと長い入力をするには

先ほど入力した一行ウィンドウは本当に一行しか入力できません。括弧の対応が取れないままエンターキーを入力するとエラーになります。では、長いS式を入力するにはどうするか?バッファが用意されているので、バッファに入力してそのS式を評価します。

次の画面はバッファにS式を入力し、S式を長押しタップしたところです1。長押しタップをするとメニューが表示されます。

input-2.png

メニューの「λ」をタップすると次になります。

result-input2.png

my-foldrが定義されたことが判ります。(my-foldr #'+ (list 1 2 3) 0)を入力した結果は次になります。

execute.png

正しく動いています。

また、バッファでの入力時にはエンターキーで自動でインデントしてくれるなどのちょっとした気遣いが嬉しいです。

ファイルを扱う

Google Playの説明に

plus a simple editor

とあるようにエディタでもあるのでファイルを扱うことができます。右上のボタンをタップすると次のようにメニューが追加されます。

file-menu.png

追加されたメニューは上から、バッファクリア、ファイルを開く、ファイルを保存、バッファを評価になります。

終了する

キーボードが表示されている画面では「戻る」の向きが下になっています。

before-close.png

これをタップするとキーボードの表示がなくなります。

close.png

この状態で「戻る」をタップするとCL REPLは終了します。キーボードをタップするとキーボード表示となります。カーソルはバッファなどでカーソルキーとして機能します。

おしまい

androidで動くCommon LispであるCL REPLを紹介しました。紹介しきれていませんが、スペースダブルタップでコンプリーションしてくれるなど助かる機能が他にもあります。ただ、まだ不具合がいろいろあるようで、この記事を書くために使っている時にハングアップすることもありました。

年末年始を迎え、帰省や旅行などで出かける人も多いでしょう。androidタブレット/スマフォをお持ちならCL REPLで遊んでみてはいかがでしょうか。


  1. 入力したコードは先日の関西LISPユーザ会でmyaoさんが発表した記事を使わせてもらっています。 

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6