xyzzy QandA

Lisp プログラミング

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

管理番号 86
最終更新 2003/04/01 00:00:00
基本的には使えません。
Top

Emacs Lisp と Commo Lisp の違いは?

管理番号 135
最終更新 2003/06/24 00:16:28
・文字の表現   ?a → #\a
・ベクタの表現   [...] → #(...)
・if の文法
  | 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はダイナミック,xyzzyはレキシカル)
  | 宣言すれば逃げれる。
・バッファローカル変数のちょっとした違い
  | Emacs で,(defvar foo nil) とやってから (make-local-variable 'foo) 
  | というのをよくやりますが,xyzzy では defvar した時点で foo が 
  | special になってしまうので,バッファローカルの値を参照できなくなっ
  | てしまいます。
・動きが同じで関数名が違うもの
  | current-buffer  → get-selected-bufferとか。
・関数名が同じで動きが違うもの(^^;
  | beginning-of-buffer とか。
・interactiveの微妙な違い
  |   (defun foo (arg)
  |     (interactive "p")
  |     ...)
  | 
  | において,Emacs では数引数がないときは nil になるみたいですが,
  | xyzzy では引数が足りなくてエラーになるので,
  | 
  |   (defun foo (&optional arg)
  |     (interactive "p")
  |     ...)
  | 
  | としなければなりません。それから,P もたぶん全然違います。
・除算   / → truncate
  | 分数になるってこと。当然,文脈に依りますけど。
・define-keyとかglobal-set-keyの引数
  | Emacs: (global-set-key "\C-a" 'beginning-of-line)
  | xyzzy: (global-set-key #\C-a 'beginning-of-line)
・文字と数値の違い
・formatの引数の数
  | Emacs: format fmt-string &rest args
  | xyzzy: format stream fmt-string &rest args
  | 
  | fmt-string の書式文字も違いますね。
・パッケージの有無
  | Common にしかない。

あたりだそうです。

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

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

管理番号 126
最終更新 2003/06/21 15:25:53
いくつかの方法があります。

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) を使い,
   ファイルをロードする。
関連項目
Top

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

管理番号 125
最終更新 2003/06/21 15:11:53
ESC TAB でできます。
Top

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

管理番号 156
最終更新 2003/07/18 19:24:56
M-x list-function してください。lisp-mode, c-mode, cc-mode, c#-mode, 
java-mode, basic-mode で使うことができます。

リファレンスも参照ください。
・list-function
Top

sexp とは何ですか?

管理番号 95
最終更新 2003/05/18 01:31:34
sexp (=S式 Symbol-Expression) 通常は,括弧一組(の式)のことを指すよう
です。
Top

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

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

[xyzzy:01997] より。
Top

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

管理番号 148
最終更新 2003/06/27 23:29:18
登録されないようにしない限りは,必ずどこかのパッケージに登録されます。
パッケージシステムは,他のものと名前が重複しないようにするための仕組み
なので,ユニークになりそうなプレフィックスをつけたりすれば,あまり気に
する必要はありません。

[xyzzy:06778] より。
Top

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

管理番号 149
最終更新 2003/06/27 23:30:02
editor パッケージからの export は,なるべくしない方が無難でしょう。ユ
ーザから見れば,普通に何もしていない状態(user パッケージが使われる)と
同じなので。

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

[xyzzy:06796] より。
Top

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

管理番号 150
最終更新 2003/06/27 23:31:54
ed (editor)パッケージにあれば,EmacsLisp や Mule に由来する lisp 関数
で lisp パッケージにあれば,common-lisp という規格書にのっている lisp 
関数に由来するというやつです。

[xyzzy:01896] より。
Top

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

管理番号 117
最終更新 2003/12/06 14:24:10
例えば,以下のコードの場合,

  (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] より。

リファレンスも参照ください。
・パッケージの概要
Top

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

管理番号 116
最終更新 2003/06/20 06:42:30
parse-integer が atoi に似ていますが,float だけを読むというのはありま
せん。read または read-from-string であれば何でも読めます。

  atoi : 整数文字列を整数値に変換
  atof : 浮動少数点文字列を浮動少数点値に変換

[xyzzy:04642] より。
Top

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

管理番号 110
最終更新 2003/06/18 23:21:51
以下のいずれかの式を評価してください。(例えば,ESC ESC して。)

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

[xyzzy:04642] より。
Top