Lisp プログラミング

Emacs Lisp で書かれたコードは使えますか?

管理番号
86
更新日時
2003/04/01 00:00:00
セクション
Lisp プログラミング

基本的には使えません。


sexp とは何ですか?

管理番号
95
更新日時
2003/05/18 01:31:34
セクション
Lisp プログラミング

sexp (=S式 Symbol-Expression) 通常は,括弧一組(の式)のことを指すようです。


DOS コマンドを lisp から起動して結果を buffer に受け取りたいのですが,どうしたらよいですか?

管理番号
110
更新日時
2005/08/08 13:18:26
セクション
Lisp プログラミング

以下のいずれかの式を評価してください。(例えば,ESC ESC して。)

  (execute-subprocess "dir")
  (pipe-command "dir")
  (make-process (concat *shell* " /c dir") :output (selected-buffer))

[xyzzy:04642] より。


atoi とか atof とかいう関数が見当たらないのですが何か代わりのものはありますでしょうか?

管理番号
116
更新日時
2005/08/08 13:18:56
セクション
Lisp プログラミング

parse-integer が atoi に似ていますが,float だけを読むというのはありません。read または read-from-string であれば何でも読めます。

[xyzzy:04642] より。


名前が衝突するため,exportできません。何故?

管理番号
117
更新日時
2005/08/08 13:19:49
セクション
Lisp プログラミング

例えば,以下のコードの場合,

  (setq *grep-directory-name-hook*
        #'(lambda () (car ed::*grep-directory-history*)))
  (define-key *global-keymap* #\M-f 'grep-dialog )

(setq ...) した段階では,*grep-directory-name-hook* というシンボルが user パッケージの中に登録されます。この後で grep-dialog を使う段階で grepd.l を読み込みます。このときに editor パッケージのシンボル*grep-directory-name-hook* を他のパッケージから見えるように export するのですが,それが user パッケージのシンボルと重複してるので,「重複してるから export はできんよ」と怒られます。

.xyzzy や siteinit.l にいろいろ書いておくと自分も知らないライブラリが読み込まれてて,結果的にうまく動いてることがあるので,調べるのが大変ですよね。

[xyzzy:08552] より。

リファレンスも参照ください。


シンボル名の補完入力をすることはできませんか?

管理番号
125
更新日時
2005/06/27 00:08:26
セクション
Lisp プログラミング

ESC TAB でできます。


「式を評価」ってどうすれば良いのですか?

管理番号
126
更新日時
2003/06/21 15:25:53
セクション
Lisp プログラミング

いくつかの方法があります。

1. *scratch* バッファで評価する。

   *scratch* に式を記述して,C-RET する。

2. 式を指定して評価する。

   ESC ESC し,「Eval: 」に評価する式を入力して RET する。
   (C-n, C-p で履歴が辿れます。)

3. 一つの式を評価する。

   式の末尾にカーソルを合わせ,C-x C-e (eval-last-sexp) する。

4. カーソル位置の式を評価する。

   評価したい式にカーソルを合わせ,M-x eval-defun する。

5. リージョンの式を評価する。

   評価したい式全部をリージョンにし,M-x eval-region する。

6. バッファ全体を評価する。

   評価したいバッファをアクティブにしておいて,M-x eval-buffer する。

7. 前回 M-x (execute-extended-command) から実行したコマンドを評価する。

   M-p (repeat-complex-command) する。(C-n, C-p で履歴が辿れます。)

8. ファイルに保存したコードを評価する。

   ロード関係の関数 (load, load-library, autoload, require) を使い,
   ファイルをロードする。
Seealso
カスタマイズコードを常時使用するにはどうしたら良いですか?

Emacs Lisp と Commo Lisp の違いは?

管理番号
135
更新日時
2005/08/08 13:20:51
セクション
Lisp プログラミング
  | Emacs では,
  | 
  |   if condition then-form else-forms*
  | 
  | でも xyzzy では(というか Common Lisp では),
  | 
  |   if condition then-from [else-from]
  | 
  | となってます。ですから,Emacs から移植する場合は,
  | 
  |   if condition then-from (progn else-forms*)
  | 
  | てな感じで progn で囲ってやらなければなりません。
  | 宣言すれば逃げれる。
  | Emacs で,(defvar foo nil) とやってから (make-local-variable 'foo) 
  | というのをよくやりますが,xyzzy では defvar した時点で foo が 
  | special になってしまうので,バッファローカルの値を参照できなくなっ
  | てしまいます。
  | current-buffer  → get-selected-bufferとか。
  | beginning-of-buffer とか。
  |   (defun foo (arg)
  |     (interactive "p")
  |     ...)
  | 
  | において,Emacs では数引数がないときは nil になるみたいですが,
  | xyzzy では引数が足りなくてエラーになるので,
  | 
  |   (defun foo (&optional arg)
  |     (interactive "p")
  |     ...)
  | 
  | としなければなりません。それから,P もたぶん全然違います。
  | 分数になるってこと。当然,文脈に依りますけど。
  | Emacs: (global-set-key "\C-a" 'beginning-of-line)
  | xyzzy: (global-set-key #\C-a 'beginning-of-line)
  | Emacs: format fmt-string &rest args
  | xyzzy: format stream fmt-string &rest args
  | 
  | fmt-string の書式文字も違いますね。
  | Common にしかない。

あたりだそうです。

[xyzzy:00085], [xyzzy:00089], [xyzzy:00093] より。


全部のシンボルを user パッケージに入れてしまってはダメなのでしょうか?

管理番号
147
更新日時
2005/08/08 17:01:29
セクション
Lisp プログラミング

駄目とは言いませんが,そうすべきとも思いません(^^; まあ,好きなやり方でいいのではないでしょうか。一般的な各モードのように,ほとんどのシンボルを公開するような場合はパッケージを使う意味はほとんどないでしょう。逆に,compile とか cmuloop のようなほとんどが内部関数の場合は使った方が便利なのではないかと思います。

[xyzzy:01997] より。


個人的に作成した変数名や関数名はパッケージに登録するのが好ましいのでしょうか?

管理番号
148
更新日時
2005/08/08 13:21:23
セクション
Lisp プログラミング

登録されないようにしない限りは,必ずどこかのパッケージに登録されます。パッケージシステムは,他のものと名前が重複しないようにするための仕組みなので,ユニークになりそうなプレフィックスをつけたりすれば,あまり気にする必要はありません。

[xyzzy:06778] より。


自作マクロを editor パッケージに登録していいのかな?

管理番号
149
更新日時
2005/08/08 13:21:49
セクション
Lisp プログラミング

editor パッケージからの export は,なるべくしない方が無難でしょう。ユーザから見れば,普通に何もしていない状態(user パッケージが使われる)と同じなので。

数個の関数で完結するようなものであれば user パッケージを使用して,それなりの規模で内部関数が多くあるような場合には,独自のパッケージを使用すればいいのではないでしょうか。

[xyzzy:06796] より。


editor パッケージと lisp パッケージはどうちがいますか?

管理番号
150
更新日時
2005/08/08 13:22:20
セクション
Lisp プログラミング

ed (editor)パッケージにあれば,EmacsLisp や Mule に由来する lisp 関数で lisp パッケージにあれば,common-lisp という規格書にのっている lisp 関数に由来するというやつです。

[xyzzy:01896] より。


カレントバッファで定義されている関数一覧を得ることはできますか?

管理番号
156
更新日時
2005/08/08 13:22:47
セクション
Lisp プログラミング

M-x list-function してください。lisp-mode, c-mode, cc-mode, c#-mode, java-mode, basic-mode で使うことができます。

リファレンスも参照ください。