初心者に対してのCommon Lispの問題点初心者に対してのCommon Lispの敷居の高さの一つに、「開発環境をどうやって整えるのか?」 と言う問題があります。 これは極めて重要なんですが、あまり多くが語られる事が無いトピックでもあります。 一つの理由に、 プログラミング初心者はLispを選ばない と言うことがあると思います。 一般的にLisp系言語は大学等で「理論的な談話」として「学ばされる」ものであって、「個人が積極的にチョイスする」言語じゃない、と言う哀しい現実があります。 あるいは、求道者的にプログラミング言語を学んでいる人たちが「究極奥義を極めよう」として選択する言語であって、そう言う人たちは既に開発環境に対して「何らかの」知識を持っていて、「環境を整える」事が苦になりません。 よってLispの入門書に「開発環境」に対しての記述が殆ど無い、と言う状況になってしまってるのです。 どうして猫も杓子もMicrosoft系言語なのか?面白い事に、プログラミング言語を学びたい、と言う人たち(サンデープログラマ予備軍)は、まず最初に「C言語」を学ぼうとするケースが圧倒的に多いんです。 C言語なんかは明らかに「初心者向け言語」じゃないんですが、どう言うわけか「C言語から」始めようとする。 「初心者向け」を考える際、C言語なんかのコンパイラより、Lispのようなインタプリタを備えた言語の方が適してる筈なのに、です(もっともLispは必ずしもインタプリタ言語ではありません)。 一体どう言う基準で「C言語」なんでしょうか? これには色々な理由が考えられます。一つは「C言語」の言語としてのネームヴァリューでしょうし、あるいは本屋のプログラミング書籍コーナーにある「C言語関連書籍」の数の多さが魅惑的なのかもしれません。確かに本屋なんかに行けば「C言語関係」の書籍が一番多く、それに比べればあらゆる「その他の言語」関連の書籍なんてカスみたいな分量しかありません。 しかし、恐らく一番大きい理由は「Microsoftが提供しているから」なんだと思います。恐らくMicrosoftが「Visual Lisp」なんて処理系をリリースしたら一気にLispはブレークする事でしょう。 何故Microsoft系言語が優勢なんでしょうか?誰でも彼でも「Microsoft」と言うネームヴァリューに惹かれるのでしょうか? それは絶対無いです。ただし、MicrosoftはMicrosoftと言うネームヴァリューに恥じない開発環境を提供している、と言う事は言えるでしょう。 要するにMicrosoft系言語のウリはMicrosoftの統合開発環境なんです。
もう見たからに使いやすそうですね。 実際、Windows系プログラマには極めて評価の高い開発環境ならしいんですが(ライブラリ検索等に優れているそうです)、本質的には「環境」は「環境」であって言語自体の能力とは何も関係がありません。 が、評価の基本はまずは何より「見た目」、そして「オールインワンで起動したらすぐにプログラミングをはじめられる環境」ってのが大事なのです。いちいちメンド臭い設定なんてやりたくない。 オープンソース系言語の愛用者は絶対に意見が違うでしょうが、デフォルトのIDEってのは極めて大事なのです。「ビルトインですぐはじめられる」と言うのは初心者には抗いづらい魅力があるのです。 その証拠に、恐らく現時点のWindowsでは、EMBARCADEROのC++BuilderのフリーエディションよりMicrosoftのVisual Studioのダウンロード数が上回っている、と思います。前者は剥き出しのC++コンパイラ、後者はIDE付き、となれば結果は明白ですよね。 特にMicrosoftはWindowsの提供元ですし、Windowsの環境と親和性のある「どこを触れば何がある」とWindowsユーザーに対して直感的に分かりやすいインターフェース/デザインを採用して、「さすがMicrosoftだ」と思われる環境作りに気を使っている。結果、プログラミング言語のメーカーとしても信頼度が上がっていく、と言う好循環が起きてる、と思われます。 「いや、別々の言語で別々のIDEがあったらダメだよ。言語を変える度にIDEを別々に学ばなくてはならないから効率が悪い。」 と言う意見はもっともだと思います。しかし、これはやっぱり「プロの意見」なんですよね。 初心者は「色々な言語を」既に覚えているわけじゃありません(だからこそ"初心者"なのです)。また、言語を覚える前に環境の設定をする(もしくは環境の設定方法を学ぶ)、と言うのは大変な苦痛です。 学校でフォーマルに習うならいざ知らず、サンデープログラマ予備軍が欲しいのは「インストール→即実行」と言う環境であるのは間違い無いのです。環境に関する設定を学ぶのは後々で構わない。そこをMicrosoftは良く分かっている、のです。 例えばEmacsなんかでも使用しているアドオンでキーバインドが変わる、なんて事はしばしば起こり得るので、そうなると「見た目Emacs」なんですが、事実上「中身が違う」と言う事もあり得る、んです。 いずれにせよ、Common Lispも本来なら「インストール→即実行」と言う環境がある事に越した事がありません。さもなければポール・グレアムのハッカーと画家 2つの解決策一応断っておきますが、この記事は原則「Windowsユーザー向け」です。上の方でMicrosoftを持ち上げているような書き方していますが、ぶっちゃけて言えば「Lispでの開発環境設定」はWindowsだから難しい、と言うのが本当のトコロです。反面、Linux辺りでは実はそこまで難しく無いのです。 一般に、プログラミング言語を走らせる環境としてはWindowsはあまり優秀ではありません。要するにエンドユーザー向け、なのがWindowsなのです。端的に言うと、プログラムを「走らせる為の」環境であるのがWindowsの本懐で、プログラムを「作る為の」環境ではない、ってのがミソなんですね。 だからMicrosoftのプログラミング言語環境じゃないと「どーしようも無くなる」ってのがある種事実なんです。反面、Linuxはプログラミング言語全体としても比較的、「インストール即実行」が得やすい環境になっています。 かと言って、「ちょっとLispをやってみたい」だけの人が、いきなり「Linuxをインストールしなさい」なんて言われても困るだけ、です。Emacsの難しさなんて論外になっちゃいます。 そこで解決策を2つ提示しておきます。 まず、古典的でポピュラーな手としてはxyzzyを使う、と言う方法があります。他に処理系を用意せずにxyzzy一本槍で過ごすのです。 と言うのも、xyzzyにはxyzzy Lispと呼ばれるCommon Lispのサブセットが入っています。よって、ある程度の事はxyzzyだけでこなせるでしょう。 これはM.Hiroi's Home PageのCommon Lisp 入門や、あるいは入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算 xyzzy自体が軽くて高機能なエディタですし、「入門用」を考えれば処理系をどうするか悩むよりは、大概の事をxyzzyでやってのけた方が効率的だ、と言う事は言えると思います。 もう一つの方法がLispboxと言う「オールインワン」の開発環境を入手する、と言う方法です。現在ではこれがイチオシ、ですね。
LispboxはOS別、処理系別に数種類用意されています。 とは言っても、Windows版は実質CLISPヴァージョンしか選択肢が無いとは思います。また、「初心者用」としてはアレコレ悩む必要も無いでしょう。 一方、Linuxユーザー、Macユーザー向けには「ちょっとは選ぶ楽しみが」用意されています。
Lispboxの起動Windows版の場合はインストーラのインストラクションに従ってインストールしたら、デスクトップ上にLispboxの起動アイコン(図柄はBATファイルのもの)が出来ている筈です。それをダブルクリックする事でLispboxが起動します。Linux版の場合、HOMEディレクトリ内に展開されたLispboxのディレクトリ内にlispbox.shと言うシェルスクリプトがある筈です。 それを端末で指定してLispboxを起動します。 註:lispbox.shをテキストエディタで開いてみると分かりますが、デフォルトでこのシェバングはとUNIXスタイルで記述されています。 Lispboxの使い方Lispboxは非常に使いやすいオールインワンのCommon Lispの統合開発環境です。WindowsではじめてLispに触れる「プログラミング初心者」にもお奨めです。しかしながら、フロントエンドがEmacsであり、見た目としては「地味」ですし、特にWindows環境に慣れた人には取っつきづらく「ユーザーフレンドリーに見えない」のも事実だと思います。 が、本当にこれはフリーのLispプログラミング開発環境としては最強ですし、Emacsへの批判の代表とも言える「ややこしいキーバインド」にせよ、数種類覚えるだけでかなりの事が可能です。少なくとも、初心者が覚えるべきキーバインドはほんの数種類であるべきですし、あとはマウスでプルダウンメニューに頼れば良い、のです。 よってここでは「最小限のキーバインド」だけ紹介しておきます。 そしてその「数種類のキーバインドだけ」で快適なLispプログラミングが行えること間違い無し、です。 ここでは実際にLispプログラムを書く事は避けておいて、紫藤のページのCommon Lispのセクションの関数電卓のスクリプトを利用してLispboxの使い方を紹介していきます。 関数電卓スクリプトはここからダウンロードして展開します。 すると、次の3種類のファイルが含まれているのが分かると思います。
と言うのも、この関数電卓スクリプトの本体はこれだけ、だからです。他の2つは、一つはWindows用の環境変数設定絡みのもので、デスクトップのアイコンをダブルクリックしたと同時にCommon Lisp処理系を起動させる為のもの(smartcalcconsole.bat)、もう一つは自動でスクリプト本体を起動させる為のもの(smartcalcconsole.lisp)で、実はこの2つは計算そのものには何も関係が無い、のです。 そこで、今回の実験ではsmartcalcconsoleini.lispだけに焦点を絞って、Lispboxの操作を記述して行きます。 まずはsmartcalcconsoleini.lispをProgram Files内のLispBoxフォルダ内に入れてください。これで準備は完了です。 (あるいはこのページの最下段にあるAttachmentsからsmartcalcconsoleini.lisp.txtをダウンロードする事も可能です。その場合、ダウンロード後に拡張子の.txtを消去して下さい。) さて、キーバインドですが、LispboxのショートカットではCtrlキーとAltキーを多用します。例えばCtrlキーとcキーを同時に押す事を文書中ではC-cと表現するのが習わしとなっています。同様に、Altキーとqキーを同時に押す事をM-q等と表現します。これらは習慣ですね。 また、この手の作業を二回続けて行うのも「良くある」ショートカットになっています。例えばC-c M-qと書かれた場合は「Ctrlキーとcキーを同時に押した後、Altキーとqキーを同時に押す」と言う意味です。 それではやって行ってみましょう。まずはLispboxを起動して下さい。
如何でしょう?このように、Common Lispでは関数を書いた.lispファイルの作成、コンパイル、REPLへの.faslファイルのロード、プログラムの実行/テスト、と言うようなサイクルでプログラムを作り上げて行きます。 そして、今まで出てきたLispboxのショートカット・キーバインドはC-x C-fとC-c C-kの二つだけ、です。特にC-c C-kは.lispファイルの保存までやってくれます。従って、この二つだけでかなりの事をカバーしているので当面は問題が生じないでしょう。 後、一つ覚えるとしたら、関数定義が間違っていた場合、コンパイルのエラーでデバッガが立ち上がるのですが、そこから脱出する方法だけ、です。その場合は黙ってqを押せば良いのです。 Lispboxの使い方++大体のLispでのプログラミングのサイクルは上記の通りでオーケーです。ここではもうちょっと「複雑な」事を行ってみます。 とは言っても「コマンド数」は限っておく、と言う方針はそのまま、とします。そして、日常的に使う「Lispプログラムを書く際の便利な機能」に絞って展開していきます。 「たまにしか使わないコマンド」を覚えるのは全くの無駄ですし、それこそマウスとプルダウンメニューに頼れば良いのですから。 例題としては紫藤のページのテンプレートの使い方と展開形の確認で紹介されているマクロ、 nil!を実際プログラムしていく、と言う事にします。nil!はたった2行のプログラムですが、だからこそ「Lispプログラムを書く際Emacsをどう操っていくのか」説明するには端的な例になり得る、と思います。(逆に長いプログラムだと焦点がボケてしまいます) では前項の状態の続き、と言う事にします。
如何でしょうか?ここで出てきた新規コマンドは C-c Tab、C-j、C-c C-qの三つだけ、です。これらはLispプログラムを書く時良く使うものです。これら以外はそうそう使わないでしょう。これら以外に必要だとしてもあと2つくらい、でしょうね。 以下にここまでで挙げた必修キーバインド+2個を表にしておきます。 以上、ご覧の通り、たったの8つのショートカットだけでLispboxと付き合いはじめられます。 基本的に、WindowsでLispboxを触る以上、殆どの事はマウスでの操作で充分でしょう。確かにあらゆる操作でキー入力の方が速いのは事実ですが、別にタイピング大会に出場するわけでも無いですし、豊富にある(と言うか"あり過ぎる")Lispboxのキーバインドを全部覚えようとするのは時間の無駄です。 大事なのは「必要に感じたら」徐々に覚えて行けば良い、って事です。最初から「何でもかんでも」覚えようとするのは効率が悪過ぎます。また、Emacsの基本操作に関しては他の記事にも色々と書かれていく可能性が高いので、おいおいそれらを照合して行けば充分だと思います。 (あるいはここを参考にしても良いでしょう。) Windows版LispboxのTUTORIAL.jaの不在ここから余談、です。ところで、Lispboxのプルダウンメニューには[Help]があるんで、「Emacs系の基本操作の習得の必要性を感じたら」そこを開いてTutorialを見れば良いだけ、なんですが、生憎どう言うわけかWindows版Lispboxにはその手の「基本テキストファイル」が入っていません。 これは由々しき問題です。 そこでまずは、
それが終わったら、TUTORIAL.jaのファイルを
内に保存します。
そうすればLispboxのプルダウンメニューから[Help]→[Emacs Tutorial (choose language)]を選ぶと、最下部の入力欄に
が現れるので、"Japanese"と入力して[Enter]キーを打ちましょう。
そうすれば日本語版のEmacs入門ガイドが起動します。ただし、プログラミング初心者の段階では前項の表の8つのコマンドだけで当面は十分だと思います(8つでも多いんじゃないか、と極めて不安です)。 現代ではGUIが充実してるので、別にマウスを多用する事が恥ずかしい事だとも思いませんし、矢印キーもしかり、です。 (PC UNIXではGUIが否定されがちなんですが、実際問題、歴史的には初のGUIパソコン、Apple Macintoshの発売と同じ年にX Window Systemが出来ているので、WindowsよりUNIXのGUIの歴史の方が古いですし、実は老舗なのです。あんまり語られませんが。) Emacs Tutorialではマウス+プルダウンメニュー+矢印キーの代用を説明しているに過ぎません。
既存のEmacsのSLIMEによるLispbox化既にEmacsを導入している人もLispboxの「使いやすさ」に舌を巻くのではないか、と思います。特にEmacsを使いこなしている人だったら余計にそう思う確率が高いと思います。 最初に説明した通り、Lispboxは基本的にEmacsにSLIME(The Superior Lisp Interaction Mode for Emacs)と言うelispファイルを付け足しただけのものに過ぎません。 従って、今まで愛用していたEmacsをLispboxみたいに設定する事は可能です。 が、それはWindowsユーザーかつ「初心者向け」のこのページのトピックのレベルを越えるので、設定方法に関しては場所を改めてEmacsのページの方で解説します。 |
















