ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Lispで書くテキスト処理コミュの最初の一歩

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Lispを動かすためには環境が必要ですね。私はMeadowを使っています。あと、外部プロセスを起動していろんなことをやらせるためにCygwinもあった方が良いでしょう。

xyzzyでも良いかもしれません。文章を書くだけならコッチの方が使いやすかったりします(笑)。

コメント(28)

ここのページにかなりたくさんの情報が詰まっているようです。私もまだ全部は読んでいません。

http://www.bookshelf.jp/

グーグルを使ったサイト内検索も出来ますが、検索フレーズが文字化けするので、入力し直して再検索する必要があるみたいです・・・これって私だけかな?

インストールはネットインストーラーがあるので、それを使った方が良いです。

http://www.meadowy.org/meadow/netinstall

まずはMeadowをインストールしてみてください。
さて・・・このコミュニティを作って、そろそろ1ヶ月になります。もう、みなさんのPC上ではちゃんとEmacsまたはMeadowが動いているでしょうか?別に焦る必要はないのですが、インストール方法がよく分からないので、なかなかその気になれないという方もいらっしゃるのでしょう・・・

こんな話をしても最近の若い方には無意味かもしれませんが・・・むかし私が使い始めた頃は、EmacsはUNIX上のフリーソフトで、使用しているマシン上にインストールされていなければ、どこかからソースを持ってきてコンパイルしなければなりませんでした。まだその頃は、最近のようにconfigureを実行すれば、あとはmake installするだけっていう感じではなく、X11のサーバ環境が必要だったり(WnnやCannaを仮名漢字サーバする場合)、ソースにパッチを当てたり、マシン環境に応じてメイクファイルを書き変えたり・・・root権限のない人にはインストール出来ないようなシロモノでした。

そういう経緯があり、システム管理者が不親切な人だと「使いたい方は自己責任でどうぞ!」みたいな感じになっていて、下手に質問すると怒られたりして(笑)、Emacsはかなり敷居の高いモノになっていました。

しかし、最近はPC上で動くMeadowが出てきて、とくにUNIXの知識が無くてもバイナリをインストールすれば、Windows上でほぼ最新版に近いEmacsが簡単に動くようになり始めています。これは10数年前と比べたら画期的なことであり、利用者が急増してもおかしくないのですが、私の周囲でも使っている人はほとんど居ません。みんなそれぞれ見たこともないようなエディタを使っています。またvi系のエディタにも根強い人気があるようです。

私は、Emacsのようにその気になれば何でも出来るようなツールを使って、みんなが便利な使い方を共有すれば楽しいんじゃないかな?と思っているだけです。ですから、ここのコミュニティに参加している方にはEmacsを使ってみて欲しいし、便利な使い方を知っていれば、どんどん情報を出して欲しいと思っています。「こんなことは誰でも知っていることだから・・・」と思う必要はありません。自分がそれを非常に便利だと思っているのなら、それを積極的に表明すべきだと思うんです。ひょっとしたら、もっと良い方法を知っている人が居て、そういう話をきっかけに貴重なノウハウ共有が出来るかもしれません。沈黙はそういう楽しみを阻害するものです。

分からないことがあれば、何でも質問していただければ良いと思います。「少しは調べてから質問したら?」なんて説教臭いことを言うつもりはありません。遠慮なくどうぞ!(笑)
EmacsでLispのプログラムを書き、それを実行するまでのマイルストーンは、たとえば以下のようなものになると思われます。

(1)Meadowのネットインストーラをダウンロードする。
(2)Meadowをインストールする。
(3)Meadowを起動する。
(4)*scratch*バッファ上で簡単なLisp式を評価し動作を確認する。
(5)Lispのプログラムを編集し、それを評価し動作を確認する。

.emacsの書き方が分らない・・・という方がいらっしゃるかもしれませんが、.emacsがなければMeadowが起動しないわけではありません。また、Meadowをインストールしたフォルダにdot.emacsというサンプルファイルがあります。それを.emacsに改名して、環境変数HOMEに指定したフォルダまたはインストールしたフォルダのbin配下に置けば読み込んでくれます。Cygwinをインストールしている人は環境変数HOMEをc:/cygwin/home/ユーザ名にしておくと、Meadowのインストール時に実行するinstall.exeがそれを認識してくれます。

Lispに関しては、Meadowをフルインストールするとマニュアル(日本語訳したもの)が入っています。非常に巨大なマニュアルなので通読するのは無理かもしれませんが、Infoというハイパーテキスト形式になっているので、WEB感覚で斜め読みすることは可能です。慣れてくると、C-h fとタイプして関数や変数のドキュメントを見るだけで事足りるようになると思います。Lispの関数名や変数名は、名称付与がしっかりしているので探しやすいと思います。

Lispの習い始めは、概念的なところを書籍やWEBなどで軽く読んでおき、誰かが作ったプログラムを動かしたり、デバガ(edebug)でトレースしてみたりすることで、だんだん分ってくると思います。
ちょっとトピずれしているかもしれませんが・・・Cygwin上のXEmacs-21.4でWanderlustを動かしてやろうと、いろいろ遊んでみました(笑)。

まず、Cygwinの中にあるXEmacsのパッケージにはWanderlustが含まれていない?ので、適当に山岡さんのサイトあたりから最新版(バージョンは2.15.3と表示される)を持ってきます。Wanderlustの公式サイトではバージョン2.14.0を公開しています。次にWanderlustをインストールするためはapel、flim、semiの3つが必要になりますが、これもapelしか入っていないので、適当にどこかのサイトから見つけてきてインストールします。flimやsemiのインストールはすんなりいきますが、慣れていない人はmodule-installed-pなんていう素敵な関数の挙動に悩まされるかもしれません(笑)。これら3つとWanderlustは、Cygwin上のXEmacsが/lib/xmule/site-lispなんていう聞き慣れないディレクトリに勝手にインストールしてくれます。

module-installed-pのおかげで何度もXEmacsを再起動しながら(笑)、やっとインストールが済んで、Wanderlustを起動しようとすると、まずshimbunがありませんと言って怒られます。XEmacsはブラウザとしてw3mではなく本家w3を使用するので、当然emacs-w3mに含まれているshimbunライブラリなんてものはありません。そのため、とりあえず~/.foldersに記載してあるshimbunフォルダを全部コメントアウトして、Wanderlustを再起動すると今度は立ち上がってくれました。popフォルダもNewsフォルダもチェックしてくれます。次にpopフォルダを開いてメールを参照しようとすると、今度はx-face-e21が無いと言われます。Meadow3では何も気にせずに使用しているx-faceのデコーダですが、これもXEmacs上には無いようです。それで、Meadow3の中にあるx-face-e21.elを/lib/xmule/site-lispにコピーして、バイトコンパイルしようとすると、何とソースの中にXEmacsでは使用出来ない(評価したりコンパイルしようとするとエラーになる)と書かれているではありませんか!しかたなく、~/.wlの中で記述されているx-faceを/lib/xmule/site-lispにインストールして、module-installed-pに邪魔されながら、Wanderlustを何度も起動して、やっとメールを参照出来るまでになりました。また、自分のアドレスにテストメールを送信してみましたが、これも上手くいっているようです。ただし、HTMLパートを含むメールになると、懲りずにw3を起動しにいってしまうので、かなり長い時間待たされた挙句、XEmacsはコア落ちしてしまいます。

XEmacsとw3の問題には付き合っていられないので、emacs-w3mをインストールしようと決心しました。公式サイトの説明を読むとなにやらgifの表示に問題があるらしく、gifsicleとかいうプログラムをインストールしろと書かれています。それでこれのコンパイルをしていたのですが、configureするプログラムには珍しくコンパイルエラーが出るではありませんか!これにはさすがに呆れてギブアップ(笑)。

あと、仮にCygwin上のXEmacsでHTMLメールやshimbunの参照が問題なく出来るようになっても、日本語入力がデフォルトではSKKしかないという情けない状態です。以前はWnnやSJ3のインストールにチャレンジしたこともありますが、その頃のCygwinではコンパイルが通りませんでした。最近のはどうか知りませんけど・・・SKKを使うくらいなら、まだMSIMEの方がマシなので、まだしばらくはMeadow3が手放せないと思います(egg-anthyなんていうマイナーなインプットメソッドが使えそうなんですが)。というか、Meadow3ってCygwin上の他のEmacsたちに比べると結構整備されているし、使えるじゃん!って感じで改めて感心したのでした。
懲りずに、今度はCygwin上のEmacs-21.2でWanderlustに挑戦してみました。

http://nobulign.way-nifty.com/Lisp/WS000125.JPG

以下の順でインストール・・・いずれもサクッといきます。
apel-10.6
flim-1.14.8
semi-1.14.6
emacs-w3m-1.4.4
Wanderlust-2.15.3
tamago-4
egg-anthy(改造版)

tamagoはデフォルトだと/usr/local/share/emacs/site-lispにインストールされてしまうので、/usr/share/emacs/site-lispに移動します。こうしないと起動時にload-pathが自動で張られないので不便ですね。

Wanderlustの起動スプラッシュ
http://nobulign.way-nifty.com/Lisp/WS000126.JPG

shimbunでYahooのWEBニュースを表示しているところ
http://nobulign.way-nifty.com/Lisp/WS000127.JPG

この文章はegg-anthyを使って書いています。今のところ割りと快適に使えているようです。あ、上記以外にanthy(変換サーバ)もインストールする必要がありますが、これは以前Meadow3から使っていたことがあったので残っていました。
http://nobulign.way-nifty.com/Lisp/WS000128.JPG

XEmacsのときとはエライ違いです。こんなにすんなりいくとは思いませんでした(笑)。
おじゃまします。面白そうな話で、読ませていただいています。
「Cygwin の X の上の Emacs ってどうですかって」
って書こうと思って、出遅れました。

で、質問しちゃいますが、起動する時はどうしています ?
僕が試した時には、
プログラム → X → xterm を起動する
xterm の中で emacs と入力
なのですが、もっといい方法があるでしょうか ?
絹さん、はじめまして。

私はCygwin Bash Shellからstartxを起動して、出てきたxtermからemacsを起動しています。今のところそれで特に不便は感じません。コマンドはタイプしなくてもヒストリーが覚えていますし、一度Emacsを起動したら、後はその中で生活できますから(笑)。

Xサーバを起動してからEmacsを起動するシェルスクリプトは作れそうな気がします。ひょっとしたら作らなくても、ネット上に既製品があるかもしれませんね。
実は昨日、調子に乗ってGNUのCVSリポジトリ(cvs.savannah.gnu.org)からEmacs-22.0.50をチェックアウトし、コンパイルしていました。ファーストトライはNG(笑)。例によってEmacsの中でmakeを実行していたのですが・・・temacsまではものの数分で出来るのに、そのあとのlispファイルのバイトコンパイルにものすごく時間がかかります。約12時間後、lisp/obsoleteの中のファイルをバイトコンパイル中になぜかX11のエラーが発生し、Emacsがこけてmakeが止まっていました。現在はX11を終了させ、Cygwinターミナルからセカンドトライ中。makeの様子は、make bootstrap >makelog.text 2>&1として、lessでmakelog.textを監視しています。

以前、Emacs-22.0.50ベースのMeadow3のコンパイルをたまにやっていたのですが、こんなに時間がかかったことはありませんでした。その時はlispファイルのコンパイルが始まると、CPUの負荷が上がって、ノートPCの温度がどんどん上がっていき、そのまま放置すると熱でPOWER OFFしてしまうくらいでした。タスクマネージャでプロセスの様子を見ていると、やはりbootstrap-emacs.exeにほとんどCPUが割り振られていないような動きをしています。ひょっとしたら、以前とはWindowsに常駐しているモノが違うからかもしれません。それにしても・・・この調子だと、コンパイルが終わるのは今日の深夜になるのではないかと思われます。挙句に動かなかったら頭にきますね。いや、私は単なるユーザだから、いくら時間がかかっても良いんですけど(笑)。

つづく。
Cygwin の bash の窓で、次のように操作します:
────────────────────
17 cvs -d :pserver:anoncvs@cvs.sv.gnu.org:/sources/emacs co emacs

19 mkdir emacs-work
20 cd emacs-work/
21 ../emacs/configure
22 time make bootstrap
...
Directory /home/makoto/emacs/lisp/./toolbar
Directory /home/makoto/emacs/lisp/./url
Generating /home/makoto/emacs/lisp/cus-load.el...
Loading vc-cvs...
Saving file /home/makoto/emacs/lisp/cus-load.el...
Wrote /home/makoto/emacs/lisp/cus-load.el
Generating /home/makoto/emacs/lisp/cus-load.el...done
make[2]: Leaving directory `/home/makoto/emacs-work/lisp'
make[1]: Leaving directory `/home/makoto/emacs-work'

real 70m32.078s
user 11m42.671s
sys 3m52.668s
bash-3.00$
────────────────────
この後で、プログラム → Cygwin X → xterm とすると xterm の窓が開きます。その中で、
────────────────────
cd
emacs-work/src/emacs
────────────────────
とやると Emacs が起動しました。この後に make install も、ちょっと時間がかかりましたが完了しました。
(以上報告ということで)
絹さん、ご報告ありがとうございました!

えーっと、上記のログではtimeの表示が70mとかになっていますが・・・ひょっとして1時間ちょっとでbootstrapが終わったということですか?マシンとOSは何を使っています?
Microsoft Windows XP
Professional
Version 2002
Service Pack 2

Dell Optilex GX620
Intel(R)
Pentium(R) 4 CPU 3.4GHz
504MB RAM
と書いてあります。実は借物なのですが。

(時間は手では測っていないので正確なところは分ら
ないのですが 70m というのはそういう意味ですよね)
さきほど、やっとbootstrapが終わりました(笑)。timeコマンドが表示した値は次の通りです(汗)。

real 498m47.413s
user 32m58.872s
sys 14m14.492s

こちらの環境は・・・マシンスペックが全く違いますね。

Microsoft Windows XP
Home Edition
Version 2002
Service Pack 2

IBM ThinkPad R30
Pentium 3 CPU 996MHz
632MB RAM

でも上記の値は、Cygwinターミナル以外のアプリケーションを全部終了させ、NICを無効、ウイルススキャンを無効、その他、不要と思われる常駐プログラムをほとんど終了させて・・・のものですから、マシン性能比が7倍強ということでしょうか・・・トホホ。

さて、この後はどうなるのやら(笑)。

つづく。
ある程度予想はしていましたが・・・Emacs-22.0.50はGNUのCVSから持ってきて、そのまんま私のCygwin環境でコンパイルしても使い物にはなりませんでした。約10時間かけて、make bootstrap、make installした後、emacs -qでは立ち上がりますが、.emacsを読み込むとアボートしてしまいます。原因を探ることはある程度可能です。しかし、私の稚拙な.emacsを読み込んで起動しないということは、時間をかけて原因を探っても、対処不能な問題が見つかるだけだと思われます。Cygwin上でコンパイルしてサクサク動くようなら、とっくにバンドルされているはずですね(笑)。
http://nobulign.way-nifty.com/Lisp/WS000129.JPG

実は、世の中には既にEmacs-23.0.0を動かしている人が居て、それならもうEmacs-22は問題ないのかな?なんて思った私が甘かったわけですね。Linux上なら、もう少しまともに動くのかもしれません。

まあ、ringサーバにtarボールが置かれるようになるまで待った方が良いのでしょう(笑)。当面はCygwinにバンドルされているEmacs-21.2.1かMeadow3を使用するつもりです。
このトピックで最新のEmacs事情みたいなことをやるのはヘンなので・・・別のトピックを立てたいと思います。

よろしく!
・いーまっくす?
・みーどぉう?
・りすぷ?
・しぐうぃん?

その気にさせる変な名前達・・・
よし、やってみよう!
Meadow, Cygwinをインストール。
Cygwin、時間掛かりすぎ
Meadow、アイコンかっこ悪い。
Cygwin、アイコン気持ち悪い。

わけわかんないけど
いっぱい失敗しながらやってみます。
横着者が楽する為に頑張ります。
次は、初心者向けの本買ってみます。
てかMeadow、本少ね!
s-sukeさん、はじめまして。

Meadowは動きましたか?インストールしたのはどのバージョンでしょう。2.XX系のリリース版と3.00-devという開発版がありますよね。私は最近Meadowから離れてEmacs-23を使っています。これもまだ開発版なので、たまにコンパイルが通らないような更新があるようです。自分でコンパイルすると、何となく愛着が湧くものです(笑)。

たいていの文章はEmacsを使って書いています。もちろん、この文章も。他のエディタは使う気になりません。Eggが使えて、Emacsと同じキーバインドのものがあれば考えるかもしれませんが・・・

よろしくお願いいたします。
ノブりんさん、はじめまして。
挨拶が遅れてしまいました。

自分がインストールしたのは、Meadow3.00です。
netinstallのページでオススメと書かれていたので。
Gameをいくつか試してみました。これで動いたって言っていいのかは、わかりませんが・・・

環境はこんな感じです。

Microsoft Windows XP
Home Edition
Version 2002
Service Pack 2

AMD Athlon(tm)64 X2 Dual
Core Processor 3800+
2.01 GHz、960 MD RAM

よろしくお願いします
s-sukeさん

私もちょっと前まではMeadow-3.00を常用していました。ネットインストールしたり、SVNでソースをチェックアウトして自分でコンパイルしたり・・・そうしているうちにEmacs-23を使ってメールやニュースを書いている人を見つけたので、自分もやってみようと思ったんです。ただ私が目にする範囲で世界中を探しても、Emacs-23を使っている人は2人くらいしか見かけません。

ちなみに今、Emacs-22.0.50をCygwinX上でコンパイルしています。もうかれこれ11時間以上経っていますが、まだ最初のバイトコンパイルをやっているようです。アスロン64なら、きっと2時間もかからないのではないかと思います。

Meadowの本は・・・これはチェックしましたか?これは本といっても、WEBの情報を集めたモノじゃないかと思いますが。Emacs関係の書籍で分厚いのはたいていTexinfoを印刷したものです。GNUへの寄付金が含まれるので、値段が割高になっています。
http://www.bookshelf.jp/pukiwiki/pukiwiki.php?Meadow%2F%CB%DC

何か気付いたことがあれば教えてください。お待ちしております。
教えて頂いた本を買ってまいりました。
しばらくこれ読んで勉強します。
設定済みのMeadow2.20のCDが付属してたので
3.00はアンインストールして、こちらで遊んでみます。
7番のコメントに出ていた質問についてです。先日来、CygwinX上の
Emacs-22.0.50をメインに使いはじめたので、Windowsのスタートメ
ニューから一発起動する方法を調べていました。

今頃何?と思われるかもしれませんが、御容赦ください。

/usr/X11R6/bin/startxwin.batというファイルがあります。中身は
やたらとコメントが多いDOSのバッチファイルですが、これを以下の
ように書き変えて、Cygwinのショートカットから呼び出してやると、
一発起動できます。

──startxwin-emacs.bat──────────────────
@echo off
SET DISPLAY=127.0.0.1:0.0

SET CYGWIN_ROOT=\cygwin
SET RUN=%CYGWIN_ROOT%\bin\run -p /usr/X11R6/bin

SET PATH=.;%CYGWIN_ROOT%\bin;%CYGWIN_ROOT%\usr\X11R6\bin;%PATH%

SET XAPPLRESDIR=/usr/X11R6/lib/X11/app-defaults
SET XCMSDB=/usr/X11R6/lib/X11/Xcms.txt
SET XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB
SET XNLSPATH=/usr/X11R6/lib/X11/locale

if exist %CYGWIN_ROOT%\tmp\.X11-unix\X0 goto FINISH

%RUN% XWin -multiwindow -clipboard -silent-dup-error

:FINISH

%RUN% /usr/local/bin/emacs
──────────────────────────────

もとは、xtermをXサーバといっしょに起動するためのバッチファイ
ルだったようです。/tmp/.X11-unix/X0というファイルがあるか無い
かで、Xサーバを起動するかどうかを判定していますが、たまにXサー
バを終了させても残ってしまうことがあるので、挙動がおかしい場
合は疑ってみてください。

ちなみに、元のstartxwin.batは/tmp/.X11-unix/X0を削除するとXサー
バが終了するという想定で書かれているようですが、少なくとも私
のPCではそのように動作しないようです。
すごーく下世話ですが、ちょっと修正してみました(笑)

──startxwin-emacs.bat──────────────────
@echo off
SET DISPLAY=127.0.0.1:0.0

SET CYGWIN_ROOT=\cygwin
SET RUN=%CYGWIN_ROOT%\bin\run -p /usr/X11R6/bin

SET PATH=.;%CYGWIN_ROOT%\bin;%CYGWIN_ROOT%\usr\X11R6\bin;%PATH%

SET XAPPLRESDIR=/usr/X11R6/lib/X11/app-defaults
SET XCMSDB=/usr/X11R6/lib/X11/Xcms.txt
SET XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB
SET XNLSPATH=/usr/X11R6/lib/X11/locale

%CYGWIN_ROOT%\bin\ps.exe | %CYGWIN_ROOT%\bin\grep.exe 'XWin' > nul
if errorlevel 1 goto DIEX
goto INVOKEEMACS

:DIEX
if not exist %CYGWIN_ROOT%\tmp\.X11-unix\X0 goto NOTEXISTX0
attrib -s %CYGWIN_ROOT%\tmp\.X11-unix\X0
del %CYGWIN_ROOT%\tmp\.X11-unix\X0

:NOTEXISTX0
if not exist %CYGWIN_ROOT%\tmp\.X11-unix goto NOTEXISTDOTX11
rmdir %CYGWIN_ROOT%\tmp\.X11-unix

:NOTEXISTDOTX11
%RUN% XWin -multiwindow -clipboard -silent-dup-error

:INVOKEEMACS
%RUN% /usr/local/bin/emacs
──────────────────────────────
さて、そろそろここのコミュも開設1周年を迎えます。まだ最初の一歩を踏み出せていない方がいらっしゃいましたら、ここのトピックスですべてのウミを出し切りましょう。きっと、あなたの悩みを解決してくれる素晴らしい先輩が現れると思います。
http://www.youtube.com/watch?v=GXDl1AMgAN0&list=PLYQtljjTi9FJdO2EILhHfjOI02jKBTRAZ

Meadow上で語句の数え上げ関数作成の様子を動画に撮ってみました。私が日頃
どのようにEmacsを操作しているか、その一端を見れると思いますが、私はあま
りトリッキーなことはしないので、中/上級者にとっては退屈かもしれません。

動作確認の中でいくつも凡ミスを修正していますが、べつにわざとミスしてい
るわけではありません。私の実力はこんなものだと思います。
ファイル名を再帰的に取ってくる処理の話です。

私がよくやるのはfindコマンドを使う安直な方法ですが、再帰を使って書く方
法もあります。c:/meadow配下のファイル名取得をELPを使ってプロファイルし
てみたら、それぞれ画像のような結果になりました。まあ最適化機能がないの
で当たり前の結果なのでしょう。

で、Schemeではどのような差が出るかを知りたいのですが、環境をお持ちの方
でどなたかやっていただけないでしょうか。
別に再帰しない方法を贔屓しているわけではないのですが・・・findコマンド
を使った方法でsortしていないのは不公平だと思ってやり直しました。

何度かやっているうちに、コマンドの方はMeadowを起動した直後と2回目でかな
り時間が変わってくるようです。2.5倍くらい違うこともありました。一方、再
帰の方はほとんど変わりません。
さらに・・・(笑)

profileを使って個々の関数の呼び出し回数と時間をとってみようと思いました。
ところが、profileって基本的に自分で書いた関数のプロファイリングをするの
が目的のようで、symbol-functionがハッシュノーテーションを返す、C言語で
書かれた関数は対象としていません(M-x profile-functionsすると
wrong-type-argumentになっちゃう)でした。したがって、プロファイル出来た
のはadd-to-listのみというお粗末な結果となり、アホらしいので結果は貼り付
けていません。

Schemeのプロファイラはもうちょっと賢いのでしょうか。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Lispで書くテキスト処理 更新情報

Lispで書くテキスト処理のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング