トップページ⇒tech
677コメント207KB

Emacs Lisp

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Emacs Lisp の専用スレ。
少数派による互助を中心に、初心者の相談も気が向けば受け付けます。
単なる Emacs ユーザーは別板の Emacs 関連スレにどうぞ。

*関連スレ
LISP Scheme Part2
 http://pc.2ch.net/test/read.cgi/tech/1002584344/
LISP Scheme
 http://pc.2ch.net/test/read.cgi/tech/987169286/
00021NGNG
;; 無用なスレになったらすいません。
0003デフォルトの名無しさんNGNG
先生!なぜEmacsはメジャーなCとかではなくてマイナーなLispを採用したのですか?
その利点は何?
0004デフォルトの名無しさんNGNG
すくなくとも、Cを使わなかったのは正解だったと思われ。
0005デフォルトの名無しさんNGNG
>>3-4
いやCは使ってると思うが…

Emacs Lispがなくて、かわりにカスタマイズや拡張をCだけでやるしかないとし
たら、あんなに気軽に拡張はできなかったね。.emacs書き換えるたびにビルド
し直すんだろ?(w
0006デフォルトの名無しさんNGNG
別にCだとコンパイルしなおさなきゃいけないってわけでもない
0007デフォルトの名無しさんNGNG
>>3
> 先生!なぜEmacsはメジャーなCとかではなくてマイナーなLispを採用したのですか?
> その利点は何?

CがメジャーでLispがマイナーと言ってる時点でもうなんか終わってるな。
Lispは十分メジャーだよ。

それにカスタマイズ用に俺自作謎言語なマクロを実装しているエディタだって
沢山あるのに…。(エディタに限らないが)
0008デフォルトの名無しさんNGNG
>>3
柔軟だから。C よりはるかに柔軟だから。
0009デフォルトの名無しさんNGNG
>>7
実際はともかく、C メジャー、Lisp マイナーというのが普通(?)の多くの人の考える
ところのような気がするのですが。
0010デフォルトの名無しさんNGNG
>>1
http://pc.2ch.net/test/read.cgi/unix/1001087615/l50
こっちじゃダメなのか?
0011デフォルトの名無しさんNGNG
>>9
elisp ライブラリの数の多さを見れば十分メジャーだよ。
C に比較すれば少ないという点は否定しないけどね。
0012デフォルトの名無しさんNGNG
>>6
どうすんのさ。Cインタプリタでも書く?
それならLispにした方が2^24倍かしこいだろ。
0013デフォルトの名無しさんNGNG
カスタマイズ用のマクロ言語としては、
Cなんてほとんど使われてないと思うけど…
(あるのか?)
0014デフォルトの名無しさんNGNG
>>13
>>3 は秀丸とかWZとかのC風マクロ言語を意識してるんじゃない?
0015デフォルトの名無しさんNGNG
>>14
うん、そうかも。それってどマイナーだよね。
0016デフォルトの名無しさんNGNG
今日は振替休日なので、マターリとelispのお勉強〜
defun と message と ifが使えるようになったにょ〜。
0017デフォルトの名無しさんNGNG
いきなり煽り合いからのスレスタートか・・・
先が思いやられるな
0018デフォルトの名無しさんNGNG
elisp は再帰をできるだけ使うなというのがなえるな.
elisp が「本物」の lisp や scheme だったらもう文句なしなのに.
0019デフォルトの名無しさんNGNG
>>18
「本物」の lisp であっても再帰には制限あると思うけど。
Schemeはともかく。
0020デフォルトの名無しさんNGNG
elispってschemeより古いんだっけ?
0021デフォルトの名無しさんNGNG
>>20
GNU Emacs自体はScheme(1975年)ほど古くはないけど、
elispの仕様はMacLispとかの古いLispに非常に近いね。
特に、dynamic scopeしかないところが。
0022デフォルトの名無しさんNGNG
>>12
> それならLispにした方が2^24倍かしこいだろ。

やはり残りの8bitはタグですか?
0023デフォルトの名無しさんNGNG
結局 emacs lisp 固有の質問というのは Unix 板の emacs スレと
ずいぶん重なるんでじゃないですか?
0024デフォルトの名無しさんNGNG
>>22 0倍になっちゃうじゃないか!!
00251NGNG
>>10,23
やはりそうなるんでしょうか。
この板に来るんだけれども、UNIX 板などには来ない人からのレスを期待して
しまっていました。lisp 人口が少しでも増えないかなとか思いつつ。
lisp か C かはアレとして、>>16のような人が増えると、みんなが幸せに
なれますね。
0026デフォルトの名無しさんNGNG
つーかマニュアルで解決しちゃうんじゃないかな。
ちょっとした小物が多いだろうし。
0027デフォルトの名無しさんNGNG
>>22
Elispが上位8ビットをタグに使っていたことを知っている人が
いるとは思わなかった。今は5ビットだけどね。
0028デフォルトの名無しさんNGNG
>>1
UNIX板はEmacsスレは結構盛んです。一ヶ月半の間に500近い書き込み。
自分もよく教えてもらってます。
0029名無しさん@EmacsNGNG
最近はemacs21の話ばっかりで盛れはカヤの外。
厨房っぽい質問してもシカトされるので、こういうスレは助かります。

今、「リスト遊び」とelisp introの日本語訳を読んでます。
テキストを扱う仕事なので、非常に興味を引かれます。
最初は基地外みたいな言語だと思ったけど、なんとなく理解できてきました。

OSを問わずほぼ同じ環境を整えられるというのは、
計り知れないメリットだと思います。
一生かけて使い込んでみようかなという気になります。
0030デフォルトの名無しさんNGNG
elisp に lexical scope が欲しいと思うのは、
どのような時なんでしょうか?
dynamic scope だけでも特に困ったこと無いんですが...
0031デフォルトの名無しさんNGNG
>27 反応があってなんか嬉しい。
タグ5bitってLSBに持ってるんですよね? で、セルは32bitアラインで配置かな。
俺が見たLispは68010用。よってMSB8bitがタグ。これ最強。
今はこういう貧乏臭い実装って嫌われるから鬱。
0032デフォルトの名無しさんNGNG
lexical scope がないと、closure が作れないのでは。
0033デフォルトの名無しさんNGNG
動的スコープってわかんないんだけど、
仮引数に対しては静的だよね?
0034デフォルトの名無しさんNGNG
LispってMacから発祥なんすか?
0035デフォルトの名無しさんNGNG
>>31
なんでMSBにTAGつけるのにアラインさせるの?
LSBも空きができるじゃん。
0036デフォルトの名無しさんNGNG
>>34
違う。最初のLISPはIBMの機械。
Macの実装が多いのは、昔からメモリたくさん積んでたし、
リニアで何メガバイトもアクセスできるという、68000の石の特性も
あると思う。
0037デフォルトの名無しさんNGNG
>>33
仮引数って (defun hoge (hage) ..)
の hage の部分ですか? それも動的スコープだと思う.

>>34
初期の MacLisp という名が混乱の元では.
0038デフォルトの名無しさんNGNG
>>36,37
なるほどー。ありがとです。
003933NGNG
>>37
hageの方です。
0040デフォルトの名無しさんNGNG
MacLispと InterLispが 2大 Lispだったんだっけ。CommonLispができる前は。
たしかどっちも動的 scopeだと聞いた記憶がある。
そこに静的 scopeの schemeが気炎を吐いていたと。

静的 scopeの方が compileするためには楽だけど、interpreterだと
そんなに問題にならないのかもな。
macroとか書くときにイヤーソなことにならないかしらん。
0041暗黙の名無しさんNGNG
>35 MC68000はアドレス上位8bitはバスに出力されないから最初から空いてるの。
0042デフォルトの名無しさんNGNG
キーボードマクロ使うときに数字をインクリメントしていきたいときってあるじゃない?
そのときのために
set-g-value : (setq gGlobalValue num)
inc-g-value ; (setq gGlobalValue (+ gGlovalValue 1))
put-g-value ; (insert int-to-string gGlobalValue)
って3つのコマンド作ったんだけど、もしかして標準で同じようなのってある?
0043デフォルトの名無しさんNGNG
>>42
1+ のような関数ならあるけど, 破壊的なのはないと思った.
破壊的な汎用 1+ は macro で書ける. elisp manual の macro の所に
サンプルがあったと思う.

僕はキーボードマクロでも eval-expression を使うことが結構あるな.
0044デフォルトの名無しさんNGNG
使われている言語が Lisp なのは 開発者の Stallman が Lisp の本家である
MIT AI Lab. の出身で、彼自身が Lisp プログラマだから。

ということは偶然が単に定着しているだけかな。
0045デフォルトの名無しさんNGNG
gclな何で普及しないんですか?
0046デフォルトの名無しさんNGNG
45です。
gclを早速動かしてみようとおもいcygwinに入れました。
インストールの途中でraw_gcl.exeがスタックダンプを
吐き出して止まります。。。どうしよう。
0047デフォルトの名無しさんNGNG
ソース付きのCommonLisp処理系で一番有名なのってgcl?
ソースのコメントに日本人の名前が入ってるから
これ使いたいけど自分じゃちょっと厳しいかも。
0048匿名λ式NGNG
>>33
自由変数のscopeがlexicalなのが静的。そうでないのが動的。
静的の利点は、効率とprogramの可読性。

(defun foo (x)
(bar))
;; 互いに独立なので、fooとbarは同一lexical scapeではない。
(defun bar ()
x)

で、barからfooのxが参照できるのが動的。
;; Schemeはこれが出来ない。MacLisp, InterLisp, elispは可能。
;; Common Lispはスペシャル変数だけ可能。
;; MacLispにはcompile時のみ出来ないという時代もあった。Shallow binding以前。

(defun baz (x)
(let ((y))
(seq y (+ x x))
y))

xの参照はbinding levelを一つ越えているけど、lexical scape内だから可能。
これが「静的」の意味。binding levelはlexicalなものに限って越えられる。

;; scapeにおいて、lexical = staticって用法は他の言語で一般的。
;; S式は動的に変化するのが特徴の一つだから何か変な話だけど。
004945NGNG
自己レス
http://www.google.co.jp/search?q=cache:jGHzkwQfeA0:village.infoweb.ne.jp/~fwhw5892/cygwin/+cygwin+GCL&hl=ja
ここにも(2000.08.05)書いてあるとおりCygwinでgclは厳しいみたいです。

どうしよう。gソースの中へ入ってがんばるか、あきらめて他の
マシンで使うか。んー、、
0050デフォルトの名無しさんNGNG
ちと役不足かもしれんが、CL packageに incfがあったような >>42
0051デフォルトの名無しさんNGNG
age よう
0052デフォルトの名無しさんNGNG
あのー、
Meadowつかい始めたんですが、デフォルトだとc/c++モードの
オートインデントが半角スペースなんです。
4タブにしたいんですが、どうしたらいんですか?
0053デフォルトの名無しさんNGNG
>>48
動的スコープは、Schemeなら簡単なマクロで書けるでしょ。

でも、名前がうっかりぶつかるとプログラムが壊れるから不便だよね。
>動的スコープ。

やっぱりλならα変換ルール(束縛変数の名前を変えても意味が変わら
ない)が成り立ってくれないと…
0054デフォルトの名無しさんNGNG
fooとbarのケースでは無理>53
0055デフォルトの名無しさんNGNG
>>54
簡単に書けるよ?

(define x #f)
(define foo
 (lambda (new-x)
  (let ((old-x x))
   (dynamic-wind
    (lambda () (set! x new-x))
    (lambda () (bar))
    (lambda () (set! x old-x))))))
(define bar (lambda () x))

もちろん、実際には(fluid-letとかの名の)マクロを使うけど。
0056デフォルトの名無しさんNGNG
>>55
そりゃ、xをグローバルにすりゃ書けるだろ
0057デフォルトの名無しさんNGNG
>>56
shallow bindingっていう手法だけど、知らないのかな?
Emacs Lispがやってるのは、本質的にこれと全く同じ。
005856NGNG
>>57
知ってるよ
でも意味が異なるだろ
0059デフォルトの名無しさんNGNG
漏れがEmacs Lisp スレ立てたときは
「Unix板逝け **終了**」
で終わったのに、この違いはなんだ(藁
0060デフォルトの名無しさんNGNG
>>59
多分、>>3のおかげ。あの質問のおかげで最初の十数レスがまともな物になって、
そのおかげでそれに続く話題も(終了などにならずに)まともな物になりました。
(そういう雰囲気が作られたわけです)
2ちゃんでは、スレの初めの方のレスはかなり大きな意味を持っています。
0061デフォルトの名無しさんNGNG
でも大部分が lisp 談義になっているような.
0062デフォルトの名無しさん NGNG
>>59
こめんな、それ言ったのはおれだよ
0063デフォルトの名無しさんNGNG
>>58
どう違うの? 全く同じだと思うが。
006458NGNG
>>63
ごめんよ。勘違い。
fluid-letの存在忘れてた。
0065デフォルトの名無しさんNGNG
>>61 まー、マターリしてていいでしょう。
H○PやR○byの煽り合いスレよりゃぁだいぶんマシ。
0066デフォルトの名無しさんNGNG
>>65
ひとつ気づいたんだけど、ある程度難しい話をしてると、奴等は寄ってこないんだよね。
0067匿名λ式NGNG
>>53
> でも、名前がうっかりぶつかるとプログラムが壊れるから不便だよね。
> >動的スコープ。

*standard-output*みたいなのを、multi thread環境で使う、
って局面ではあった方が便利だよね。
竹内さんもbitのTAOの連載で言っていたけど。
ただ、thread内でsingletonとして利用しないと、>>53の言うようにまずいわな。

>>55の実装のためには、「thread-localな環境」が欲しくなるな。< multi threaded
こういう研究や実装って最近どうなんですか? > 現役の方々
0068デフォルトの名無しさんNGNG
外に出て x を書き換えてから継続で中に戻ると、書き換えた内容が忘れられてしまうという簡単な問題をなぜ誰も気がつかないのだろう?

そーか、ここのひとはみんな優しくてそのようなあたりまえのことは指摘しないのかな。
0069デフォルトの名無しさんNGNG
Emacs Lispに再入可能な継続があるのかよ。
0070デフォルトの名無しさんNGNG
もしくは>>68はdynamic-windをよく知らないのだろう。
0071デフォルトの名無しさん NGNG
仕事してる振りしてELispで遊ぶ、これ最強。
0072デフォルトの名無しさんNGNG
xyzzyは?
0073デフォルトの名無しさんNGNG
なんで xyzzy は scheme ではなく CommonLisp なのだろうか.
どうせ elisp と互換がないのだったら scheme にした方が
よかったような気がするんだけど.
0074デフォルトの名無しさんNGNG
Schemeは実用性の無いRubyみたいな言語だから。
汚くてもC++の方が実用性あるのといっしょ
0075デフォルトの名無しさんNGNG
>>74
Whats?
0076デフォルトの名無しさんNGNG
dynamic-wind を知らないというのはどちらのことやら。
試してからいえっつーの。

もし、dynamic-wind をよく知っているのに問題に気づかないというなら
lexical scope か代入のことをよく知らんのだ。
0077デフォルトの名無しさんNGNG
>>76
まさか、>>55にでてくるトップレベルのxが
実際にxという変数名だと理解してるのだろうか?
0078デフォルトの名無しさんNGNG
>>76 何が気にくわないのか良くわからんが、>>55 は確かに
Schemeのfluid-letと同等ではない。
しかし、Emacs Lispのdynamic scope変数とは同等だろ?
(ここはElispスレだということを理解してる?)
0079デフォルトの名無しさんNGNG
>>74
Rubyに実用性が無いという点にのみ同意。
0080デフォルトの名無しさんNGNG
>>79
厨房を呼ぶ呪文か。やめい。禁ッ
0081デフォルトの名無しさんNGNG
dynamic scope の特徴は使わない方で
明示的に仮引数でやるようにした方が見通しいいと思うんだけど,
結構いろいろな package で使ってるようですね. skk とか wl とか.
0082デフォルトの名無しさんNGNG
Lambda -- The utimate thread
0083デフォルトの名無しさんNGNG
dynamic-windよーわからん
0084デフォルトの名無しさんNGNG
(setq gnu '(gnu is not unix))
0085デフォルトの名無しさんNGNG
(setq gnu `(,@gnu is not unix))
0086匿名λ式NGNG
(letrec
((gnu (gnu is not unix)))
gnu)
0087デフォルトの名無しさんNGNG
誰か無限ストリームとして gnu を扱って下さい
0088デフォルトの名無しさんNGNG
(define gnu (cons 'gnu (delay gnu)))

(car gnu) => gnu
(car (force (cdr gnu))) => gnu
(car (force (cdr (force (cdr gnu))))) => gnu

しかし全然Emacs Lispと無関係。
0089デフォルトの名無しさんNGNG
is not unix
を忘れてる。
0090名無しさん@お腹いっぱい。NGNG
ここの人たちはVisualStudioを使うべきところでもEmacsですか?
ウィザードまでは使ってもあくまでソース編集からコンパイルまでは
Emacsですか?
0091デフォルトの名無しさんNGNG
VisualStudioってEmacs Lispがつかえるの?
0092名無しさん@お腹いっぱい。 NGNG
>>91
それは無理だと思うけどウィザードで生成したコードを、
編集するところにEmacs使ってるのかなっておもってさ。
0093デフォルトの名無しさんNGNG
windowsでfull実装のemacsってあったっけ?
0094デフォルトの名無しさんNGNG
>>93
Meadow は違うの?
0095デフォルトの名無しさんNGNG
meadow とか NTemacs とかの windows 用 emacs って
非同期プロセスは使えるの?
dos の時はもちろん使えなかったけど.
0096匿名λ式NGNG
>>93
XEmacs動いてるんちゃう?
0097デフォルトの名無しさんNGNG
EmacsをWindowsキーバインドにするマクロ無い?
0098デフォルトの名無しさんNGNG
マクロはないが, pc-binding-mode という関数のが望む
ものかも.
0099デフォルトの名無しさんNGNG
>>97
変態配置覚えちゃいなよ。
一週間もあれば慣れるよ。
010097NGNG
>>98
ありがとう。
>>99
仕事柄、NOTEPADやVB/VCを主に使うので・・
多分、これだけあれば違和感ないと思うんだけど。
Home/End 行頭/行末
Ctrl+Home/Ctrl+End 文頭/文末
Shift+カーソル 選択移動
Ctrl+カーソル 単語移動
Ctrl+X カット
Ctrl+C コピー
Ctrl+V ペースト
Ctrl+A 全選択
Ctrl+S 上書き保存
Ctrl+F 検索
Ctrl+Z/Ctrl+Shift+Z Undo/Redo
F3/Shift+F3 次検索/前検索
0101デフォルトの名無しさんNGNG
100get!
■ このスレッドは過去ログ倉庫に格納されています