トップページ⇒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!
0102デフォルトの名無しさんNGNG
間違えた、、、鬱だ
0103デフォルトの名無しさんNGNG
プ板にある意味が無いな。もうちょっと言語よりな話題がしたい。
;; しかし scheme とかに逸れていってしまうんだな...
0104名無しさん@XEmacsNGNG
User-agent: な環境で、絶対パスを表す文字列から、そのファイルのタイムスタ
ンプを得るにはどのように書けばいいのでしょうか?

diredは `ls -l` を使ってるらしいと聞いたのですがelisp単体では無理?
0105デフォルトの名無しさんNGNG
>>104
User-agent: がどう関係するのかわからんが、file-attributes じゃダメなの?
0106デフォルトの名無しさんNGNG
>>100
xyzzyならGates.lてファイルが用意されているんだけどね。
Emacsでは選択テキスト(リージョン)の反転表示は
無理じゃないかな?
0107デフォルトの名無しさんNGNG
>>106
無理じゃない.
transient-mark-mode
0108デフォルトの名無しさんNGNG
>>106
しかし Gates.l とは (ワラ
けどスレと全然関係無いね。
0109名無しさん@XEmacsNGNG
>>105
できました!
(format-time-string "%Y/%m/%d %T" (nth 5 (file-attributes "/home/hoge/.emacs")))
0110名無しさん@EmacsNGNG
("a" "b" "c" "d" "e" "f"...)
みたいなリストの中身を全てconcatするときって普通どうやります?

とりあえず
(eval (cons 'concat '("a" "b" "c"...)))
ってしたけどこのやり方が普通なのかどうかさっぱり。
0111名無しさん@EmacsNGNG

リージョンが指定されてる時とされてない時に動作が変る関数はどうやって作っ
たらいいんでしょう。

(defun hoge (&optional start end)
(interactive "r")
(message "hoge"))

だと、リージョン指定してないときにエラーがでます。
0112デフォルトの名無しさんNGNG
>>110
(apply 'concat '("a" "b" "c"...))
普通かどうか知らんけど。
0113名無しさん@EmacsNGNG
>>112
サンクス! apply の存在を知りませんでした。逝ってきます。
0114名無しさん@EmacsNGNG
>>111 自己レス

transient-mark-mode にしてたのが原因でした。

transient-mark-mode の場合、transient-region-active-p で
region が指定されてるかどうかチェック出来るみたいなので、
それを使うことによって解決しました。
0115デフォルトの名無しさんNGNG
お前ら、最近どうなのよ?
0116デフォルトの名無しさんNGNG
まぁ、ぼちぼちって感じ?
0117デフォルトの名無しさんNGNG
なにが?
0118デフォルトの名無しさんNGNG
文字列をn回繰り返すために、
(let ((f
(lambda (n)
(if (> n 0)
(concat "もじれつ"
(apply f (list (- n 1))))))))
(apply f (list 3)))
というコードを書いてみたが、apply() 使うと引数をいちいち
list() でくくらんといかんのが気に食わんのだけど。
他にクロージャを実行する関数ってどんなのがあったっけ?
0119デフォルトの名無しさんNGNG
funcall は?
0120118NGNG
>>119
ありがとう。括弧がひとつ減ったよ。
0121デフォルトの名無しさんNGNG
>>118
のようなやつって scheme みたいな lexical scope の
ものでは動かないんだけど、Emacs lisp では
普通の手法ですか?
0122デフォルトの名無しさんNGNG
letをletrecにすればschemeでも動くよ。>121
0123デフォルトの名無しさんNGNG
>>118
schemeならもっと簡潔に書けるよ。
0124デフォルトの名無しさんNGNG

つーか末尾再帰(非再帰ループ)でかけるんじゃ?
0125デフォルトの名無しさんNGNG
schemeならこんなかんじかな?
(letrec ((f (lambda (n)
(if (= n 0)
""
(string-append "もじれつ" (f (- n 1)))))))
(f 3))
0126デフォルトの名無しさんNGNG
named-letだと
(let f ((n 3))
 (if (= n 0)
  ""
  (string-append "もじれつ" (f (- n 1)))))
0127デフォルトの名無しさんNGNG
んじゃ非再帰版(末尾再帰)
(let f ((n 3)(r '()))
 (if (= n 0)
  (apply string-append (reverse r))
  (f (- n 1) "もじれつ")))
0128デフォルトの名無しさんNGNG
まちがえた
(let f ((n 3)(r '()))
 (if (= n 0)
  (apply string-append (reverse r))
  (f (- n 1) (cons "もじれつ" r))))
0129121NGNG
いや letrec は知っているんですけど,
dynamic scope であることに依存して書くのは
コーディングスタイルとしてどうなのかなと思って.
まあ emacs lisp だからいいんだろうけど.
僕もそうやって書いてるし(藁
0130デフォルトの名無しさんNGNG
>>129
dynamicかlexicalかの問題じゃなくないか?
Emacs Lispのletがschemeのletrecと同じなんでしょ?
0131デフォルトの名無しさんNGNG
ちょっとだけさわってみたんですが、
これってインデントはemacs-lisp-modeあたりに任せるとして、
改行はどこでやるのが普通なんでしょうか?
さっぱり見当がつきません。
0132名無しさん@EmacsNGNG
age てみよう
0133ageたら食い付く冬の厨NGNG
MacOSXはコード書くのは全てemacsですが何か?
ProjectBuilderのエディタなんか使ってられっか!(`Д´)
0134 NGNG
MacOSX のemacs って,GUIつかないの?
0135デフォルトの名無しさんNGNG
教えてください
なぜ (cons (cons 10 20) (cons 30 40))
が ((10.20) (30.40))
でなく ((10.20) 30.40)
の形になるのでしょうか?
考えると夜もねむれません

0136デフォルトの名無しさんNGNG
なんか違うのか?その二つ
0137135NGNG
要素は
((10 20) 30 40)場合
第1 (10 20)
第2 30
第3 40

(10 20) (30 40)の場合
第1 (10 20)
第2 (30 40) です
0138デフォルトの名無しさんNGNG
>>135
consは「対」を作るオペレータ。
「対」はドット表記であらわす。
(cons 1 2) => (1 . 2)
ただし、「対」の最後のcdrにnilを入れた形式をlispでは「リスト」という。
(cons 1 nil) => (1) ドット対では(1 . nil)
(cons 1 (cons 2 nil)) => (1 2) ドット対では(1 . (2 . nil))
通常lispではリスト形式で出力され、
ドット対表現はconsが1つしかない構成でのみ出力される。
リストを作る場合、普通はconsよりもlistを使う。
(list 1 2) => (1 2)
0139デフォルトの名無しさんNGNG
自分でプリティプリンタ書いてみるとわかりやすいかも。
0140デフォルトの名無しさんNGNG
(list 1 2)は
(cons 1 (cons 2 nil))と同じ。
誤解があるのかもしれないので言っておくと、
ドット対表現のピリオド'.'は小数点のそれとは何の関係もない。
で、
((10.20) (30.40)) を作る場合、
(list (cons 10 20) (cons 30 40))
または、
(cons (cons 10 20) (cons (cons 30 40) nil))
0141デフォルトの名無しさんNGNG
>ドット対表現はconsが1つしかない構成でのみ出力される。
付けたし。
cdrがpairやnilでない「行儀の悪いリスト」でも
ドット対表現で出力される。
(cons 1 (cons 2 (cons 3 4))) => (1 2 3 . 4)
(list* 1 2 3 4) => (1 2 3 . 4)
(1 2 3 . 4)はドット対であらわすと (1 . (2 . (3 . 4)))
0142135NGNG
ていねいな答えを頂いてありがとうございます。
形式的にそのように出るということでしょうか?

ただ、不思議なのは 上記  1 2 (3 4)でもよさそうなものなのに
なぜ cdr 側が (1 2) 3 4 でしょうか?
0143デフォルトの名無しさんNGNG
>>142
>ただ、不思議なのは 上記  1 2 (3 4)でもよさそうなものなのに
>なぜ cdr 側が (1 2) 3 4 でしょうか?
意味わからん
0144135NGNG
すみません リロードしてなかったもので
参考にさせていただいてちょっと考えてみます
listは純リストを作成する関数ですよね?
ですので list 1 2 はセル的に
[1][→] [2][nil]ですよね
(1 2) 3 4はどのようなセルになるのでしょうか?

勉強し始めの初心者ですみません
0145デフォルトの名無しさんNGNG
dynamic scope を上手く使って message passing って出来ます?
0146デフォルトの名無しさんNGNG
>>144
((1 2) 3 4)
のこと?
ドット対であらわすと((1 . 2) . (3 . (4 . nil)))
作る場合は(list (list 1 2) 3 4)
または(cons (cons 1 (cons 2 nil)) (cons 3 (cons 4 nil)))

それとも括弧で括ってないって事は、多値のことかな
0147146NGNG
>ドット対であらわすと((1 . 2) . (3 . (4 . nil)))
まちがい。
ドット対であらわすと((1 . (2 . nil)) . (3 . (4 . nil)))
0148デフォルトの名無しさんNGNG
>>144
((1 2) 3 4) は ((1 . (2 . nil)) . (3 . (4 . nil)))
0149135NGNG
>148
その場合セルは
[*1参照][*2参照]
*1[1][*3参照]
*3[2][nil]
*2[3][*4参照]
*4[4][nil]
ですよね? 1.2のペアと3.4のペアがある
その時なぜ 1.2のペアだけ ( )が付くのでしょうか?
0150デフォルトの名無しさんNGNG
>>149
これでどう?等幅フォントでみてね。
┌─┬─┐ ┌─┬─┐ ┌─┬─┐
│││─┼→│││─┼→│││/│
└┼┴─┘ └┼┴─┘ └┼┴─┘
│ ↓ ↓
│ 3 4
↓
┌─┬─┐ ┌─┬─┐
│││─┼→│││/│
└┼┴─┘ └┼┴─┘
↓ ↓
1 2
0151デフォルトの名無しさんNGNG
>>149
ルートのconsのcarにlistつくってるからだよ
([]←この表記ほとんど意味無いからやめたほうが良いよ)
0152デフォルトの名無しさんNGNG
>>149
うーんと、

(car '((1 2) 3 4))
(1 2)

(cdr '((1 2) 3 4))
(3 4)

(car '((1 2) (3 4)))
(1 2)

(cdr '((1 2) (3 4)))
((3 4))

だよ?
0153デフォルトの名無しさんNGNG
>>149
> その時なぜ 1.2のペアだけ ( )が付くのでしょうか?
リストはよく使うデータ構造なので、いつも (a . (b . (c . nil))) と書く
のは大変だから (a b c) と書けるようにしようと決めただけ。

自分でオブジェクトを文字列に変換するプログラムを作ってみろ。
0154デフォルトの名無しさんNGNG
やっぱ最初はドット対の辺でつまずくよね。
「なんでcdrだけ特別扱い?」みたいな(w
0155デフォルトの名無しさんNGNG
>>154
cdr のどこらへんが特別扱いっぽいのでしょう?
うにゃ?
0156デフォルトの名無しさんNGNG
>>155
carはほとんどがatomで、cdrはpairかnil
引数や内部イテレータもcdrの方向だし。
特別扱い、というかcar/cdrの使い道が異なる。
0157デフォルトの名無しさんNGNG
(a b c d e f)をcar方向に伸ばしたlist
((((((nil . f) . e) . d) . c) . b) . a)
0158デフォルトの名無しさんNGNG
>>156
使い道が異なるってことで納得。

>>157
前から順番に使っていくってことも先入観というか、固定観念ってこと
ですね。うっかり、当然とか思ってしまいそうですけど。
0159135NGNG
すみません 私の質問がまとを得ていないようで
まず、前提として (1.2) 3.4は要素数は3ですよね?

148,150さんの構造の場合は2分木的に綺麗に分かれますから
(1.2) (3.4) のように要素数2個のように綺麗に分かれないのでしょうか?

(cons (cons (1 2) cons (3 4))のようの cdr部 cons (3 4)が
car 部cons (1 2)と同じように書いても
>>153さんのゆうとおり cdr 部は自動的に展開して
(1.2) (3 (4.nil))のようになるのでしょうか?
0160135NGNG
多分私は 中途半端なCプログラマがC++をやって
”なんで 呼んでもいない関数が実行されるんだ!!”
と言ってるのと同じ気はしますが、Liaperにとっては
空気のように当然のことだと
0161135NGNG
みなさん ありがとうございます。 今わかりました。
cdr部はnilに突き当たるまで展開されるんですね。

ありがとうございました。
0162デフォルトの名無しさんNGNG
>>159
> すみません 私の質問がまとを得ていないようで
> まず、前提として (1.2) 3.4は要素数は3ですよね?

えーと、要素数ってのがなにのことをいているのかと。
全部の cons セルの数のことなのか、なんなのか。

あと、1.2 って書くと小数みたいであれなんで、"." の前後には
空白を書いておかないとだめだと思うんです。

> (cons (cons (1 2) cons (3 4))のようの cdr部 cons (3 4)が
は、(cons (cons 1 2) (cons 3 4)) ですよね。

cons は cons セルの car 部と cdr 部に他のセルへのポインタをセットする
感じだと思います。
0163デフォルトの名無しさんNGNG
これでどう

(equal (cons (cons 1 2) (cons 3 4))
'((1 . 2) . (3 . 4)))
=> t
0164135NGNG
>>162
すみません気をつけます。

もともとは car部と cdr部に同じように
セルのポインタをセットするのになぜ
cdr部だけ展開されるのかなっと

やっとわかりました cdr部は全ての要素まで
伸びるんですね
0165匿名λ式NGNG
>>164
> もともとは car部と cdr部に同じように
> セルのポインタをセットするのになぜ
> cdr部だけ展開されるのかなっと

そういう習慣だからです。
要素をcar, 残りのリストをcdrに、というコンスセルを使ったリストの仕様は、
コンスセルそのものの仕様とは無関係です。
ただし、そうでないLispは存在しません。

コンスセル: cons, car, cdr, null, consp, nil
リスト: memq, list, append
で、リストはコンスセルを使って構築されています。

(1 . (2 . (3 . nil)))→(1 2 3)は、この状況におけるsyntax sugarに過ぎません。
0166デフォルトの名無しさんNGNG
nilはコンスセルじゃなくてアトムなのでは。
コンスセルかリストかで分けるならリストになるはずだし。
0167匿名λ式NGNG
>>166
確かに。チョト勢い余った。
0168デフォルトの名無しさんNGNG
(listp nil) =>t になるよ.
0169名無しさん@EmacsNGNG
(atom nil) も
=> t
だよ
0170デフォルトの名無しさんNGNG
nil は atom でも list でもある唯一の要素です.
0171デフォルトの名無しさんNGNG
defsubst でインライン関数を定義したとき、
これを再帰呼出しした時にはどのように
扱われるのでしょうか?
0172デフォルトの名無しさんNGNG
ふつうに関数呼び出しが行われるみたい。
M-x disassemble 使え。
0173デフォルトの名無しさんNGNG
Emacs最高です。結婚してもいいですかー?!
0174名無しさん@EmacsNGNG
test property の field についての説明はどこかにありますか?
M-x shell のプロンプトに使われていて、C-a の挙動に影響しているのですが
詳しく知りたいのです。
0175Lisp 1.5NGNG
>>173
許す。ただし、持参金はたっぷりな。生命保健にも入ってもらう。
0176名無しさん@EmacsNGNG
C-x C-f ~/elisp/hoge.el してその中に

(defun hoge (dir)
(interactive "fDirectory: ")
(message "Directory=%s" dir))

と書いてあるとしますよね。これを評価して
M-x hoge で ~/elisp/ RET すると ~/elisp/ ディレクトリではなく
~/elisp/hoge.el というファイル名が渡ってしまって困るのですが、これはそ
ういうものなんですか?
0177デフォルトの名無しさんNGNG
>>176
> (interactive "fDirectory: ")
でなくて
(interactive "DDirectory: ")
では?
0178リスプ?NGNG
ソートのプログラムをEmacs Lispでの書き方を教えてください!!
おねがいします。
0179名無しさん@EmacsNGNG
>>177
あ・・・そうですね。本にそう載ってたんですが。
単純なこと聞いてすみません。

>>178
何をどう sort したいのか書かなきゃ答えようがないのでは?
# どっちにしても私も分からないけど。
0180リスプ?NGNG
>179 そうですね。ありがとうございます。
引数にランダムな数字のリストをおいたとき、値として大きい(小さい)順に
並べ替えられたリストが出力されてくるようなプログラムを教えてもらいたいのです。
よろしくおねがいします。
0181デフォルトの名無しさんNGNG
>>180
sort とか stable-sort とか?

(sort '(10 9 8) '<)
=> (8 9 10)

(sort '(8 9 10) '>)
=> (10 9 8)
0182教えてください!NGNG
関数としてsortを定義するとどうなるのでしょうか?
(dufun sort ・・・)見たいな感じで教えてもらえないでしょうか?
おねがいします。
0183デフォルトの名無しさんNGNG
>>182
や、もとからあるでしょ。
0184教えてください!NGNG
実は大学のレポートでsortを定義しろっていう問題が・・・
けど、ぜんぜんわからなかったので。
0185名無しさん@EmacsNGNG
やさしい Emacs-Lisp 講座を読んで Dired もどき作成中です。
ほーこんなこともできるのかぁって感じですごく(・∀・)イイ!!
それだけ。
0186デフォルトの名無しさんNGNG
教えて君ウザすぎ。
つーか sort なんて簡単でしょ?
;; しかし elisp でやれとは、物好きな奴がいたもんだな。
0187デフォルトの名無しさんNGNG
sexp は男性ですか?女性ですか?という意味でしょうか。
それとも セクース しようぜ!でしょうか。
0188デフォルトの名無しさんNGNG
上の教えて君じゃないがクイックソートを書いてみようとした。
edebug 中に g で Go! したら Meadow さんはお亡くなりになった。(-_-)ウツダ
0189デフォルトの名無しさんNGNG
しまった。ageてしまいました。
逝ってきます。
0190デフォルトの名無しさんNGNG
>>184
http://www.google.co.jp/search?q=lisp+sort&hl=ja&lr=
0191デフォルトの名無しさんNGNG
p は predicate です.
object が sex であるかどうかを調べます.
0192「リスト遊び」NGNG
coffeep 「コーヒーはいかがですか?」
0193デフォルトの名無しさんNGNG
t
0194名無しさん@EmacsNGNG
>>188
> 上の教えて君じゃないがクイックソートを書いてみようとした。

リストで qsort って書けますか?
やはり一度、配列に変換していますか?

0195名無しさん@EmacsNGNG
邦訳 Emacs lisp リファレンスマニュアルの改定版 でないかなー。
だれか翻訳してる?

俺がやるとしたら、前のやつを利用してもいいの?
あのマニュアルって GPL なの?
やり始めた後で出版されると、徒労だなー。
0196デフォルトの名無しさんNGNG
>>195
元のドキュメントが GPL なんで、翻訳も GPL だよん。
ソースは ftp.ascii.co.jp/pub/GNU や openlab.ring.gr.jp/gnujdoc あたりに。
0197名無しさん@EmacsNGNG
asciiのほとんどtexiを印刷しただけっぽいリファレンス本を買った
漏れはイッテヨシだった…


あとで存在を知った邦訳のオンラインマニュアルのが数倍つかいやすいでやんの
0198Emacs-Lisp厨NGNG
Emacs Lisp を勉強しています。
d:/hoge/info にある emacs-[0-9]+ というファイルを emacs-ja-[0-9]+ とい
う名前でコピーするプログラムを書いてみました。

わざわざ elisp で書く必要もないのですが。
簡単に書けるかと思ったら、書いてみると意外に難しかった・・
こうやったらもっと簡単に書けるぞ (゚Д゚)ゴルァ
というツッコミをお待ちしています。


(let ((files (directory-files "d:/hoge/info"))
old-file new-file
rename-list)
(save-excursion
(set-buffer (get-buffer-create "*tmp*"))
(erase-buffer)
(while files
(setq old-file (car files))
(if (string-match "emacs-\\([0-9]+\\)" old-file)
(progn
(setq rename-list (cons old-file rename-list))
(insert old-file "\n")))
(setq files (cdr files)))
(goto-char (point-min))
(setq rename-list (nreverse rename-list))
(cd "d:/hoge/info")
(while (re-search-forward "emacs-\\([0-9]+\\)" nil t)
(setq new-file (concat "emacs-ja-"
(buffer-substring (match-beginning 1)
(match-end 1))))
(copy-file (car rename-list) new-file t)
(setq rename-list (cdr rename-list)))))
0199Emacs-Lisp厨NGNG
あ…最後に kill-buffer 足したはずなのに古い方コピーしてしまった。

# あとsave-excursion の使いかたとかいまいちよくわかっていないのですが…
0200デフォルトの名無しさんNGNG
>>198
(mapc
(function (lambda (file)
(let ((new-file (replace-in-string file "emacs-" "emacs-ja-" t)))
(copy-file file new-file t))))
(directory-files "d:/hoge/info" t "\\`emacs-\\([0-9]+\\)\\'" t))

いちいちバッファに書く必要なんぞない。
0201Emacs-Lisp厨NGNG
なるほどー。mapc というのは mapcar のことですか?
やっぱりこれくらい単純になるんですね。replace-in-string というのも初め
て見ました。勉強しに逝ってきます。
0202デフォルトの名無しさんNGNG
describe-functionしる。

`mapc' is a compiled Lisp function
(mapc CL-FUNC CL-SEQ &rest CL-REST)

Documentation:
Like `mapcar', but does not accumulate values returned by the function.

結果をリストにする必要がないから若干効率がいい。
0203デフォルトの名無しさんNGNG
つーかdescribe-functionくらい知ってれば、directory-filesでフルパスにさ
せたりパターンを指定したりできることくらいすぐ分かるはずだ。
標準だったらC-h fでできるからこれくらい覚えとけ。あとC-h vモナー。
0204Emacs-Lisp厨NGNG
>>202
describe-function はしたんですが、mapcar と mapconcat しかなかったので。
何でだろ…
0205デフォルトの名無しさんNGNG
>>202
> 結果をリストにする必要がないから若干効率がいい。
嘘書いちゃだめだよ。lisp/emacs-lisp/cl-extra.el 見てみれ。
emacs 21のbuilt-inのmapcならその通りだけど。

>>204
(require 'cl)
あまりお勧めしない。
0206Emacs-Lisp厨NGNG
Emacs21 にはありました。Meadow にはないのかな…
っと思ったら >>205 の (require 'cl) でできました。
cl ってことは Common Lisp の関数なんですかね。
0207デフォルトの名無しさんNGNG
>>206
(require 'cl) してまで使う必要ないだろ。mapcar 使っとけ。
0208Emacs-Lisp厨NGNG
>>207
はい、これから使うときは mapcar 使うつもりです。

ところで replace-in-string って XEmacs にしかないんですかね?
0209デフォルトの名無しさんNGNG
replace-regexp-in-string がある。
0210デフォルトの名無しさんNGNG
でも cl の flet とか case とか便利だよね.
0211デフォルトの名無しさんNGNG
今日の日付から先週の月曜日が何月何日か知りたいんですが、簡単な方法って
あります? calender とか使ってできる方法があれば教えてください。
0212デフォルトの名無しさんNGNG
calendar ですね。間違えました。
0213デフォルトの名無しさんNGNG
interactive にやるんなら calendar で日付を mark して
region 間で M-=

lisp でのやり方は知らん
0214211NGNG
>>213
interactive にではなくて elisp プログラムとして使いたいのですが。

自分で書くとしたら…
1. (current-time-string) で今日の曜日と日付をとってくる。
2. その週の月曜日が何日かを出す。
3. 先週の月曜日が何日かを調べる。

って感じになりますかね。月の始めの場合の処理が難しそうなんでちょっと辛
いかなぁ。

;; メイルのテンプレート用に勉強のために作るつもりです。
;; 勉強なんだから苦労してでも作れって言われそうですが、なるべく簡単な
;; 方法でやりたいので。(それも自分で考えろ (゚Д゚)ゴルァ だけど)
0215デフォルトの名無しさんNGNG
なんでメールに先週の月曜の日付をいれんの?
0216デフォルトの名無しさんNGNG
>>214

私なら…
1. (nth 6 (decode-time)) で今日の曜日を取得
2. 先週の月曜日が何日前になるかを算出
3. (decode-time) の DAY を n 日前にして encode-time
;; DAY が 0以下でもちゃんと処理してくれる:-)
必要に応じてまた `decode-time' するなり、`format-time-string' なり。

calendar 使うなら…
(calendar-gregorian-from-absolute
(calendar-dayname-on-or-before
1
(- (calendar-absolute-from-gregorian (calendar-current-date)) 7)))
0217213NGNG
>>214
こういうのは
describe-key で M-= して
help から calendar.el の該当関数の所にとんで
参考にするといいよ.
0218211NGNG
>>215
週間作業報告を書くのに先週一週間分の日付を入れなきゃいけないので(w
今は手作業で入力してるんで面倒なんですよね。

>>216
ありがとうございます。参考になりました。encode-time と decode-time 使っ
てやってみます。

>>217
わかりました。これから lisp のソースもいろいろ読んで研究します。
;; TAGS ファイルも作れたし。
0219デフォルトの名無しさんNGNG
あげ
0220名無しさん@MeadowNGNG
>>211
倉庫行き回避に、先週の月曜はいつだ、を作ってみた。
いきなり、土日の先週の月曜っていつだ?って考え込んだ。
元のお題が「週間作業報告を書くのに先週一週間分の日付を入れなきゃいけないので」
なので、土日なら同じ週の月曜としてみた。

月曜 〜 金曜 → 先週の月曜
土曜 〜 日曜 → 今週の月曜

効率より、修正のしやすさをちょっと考慮。

(let* ((today (decode-time
;;(encode-time 0 0 0 Day Month Year)
))
(day (nth 3 today))
(month (nth 4 today))
(year (nth 5 today))
(dow (nth 6 today)) ;0(Sun)-6(Sat)
(dst (nth 7 today))
(zone (nth 8 today))
days-before)
(cond
((= dow 6) ;Sat
(setq days-before 5))
((zerop dow) ;Sun
(setq days-before 6))
(t ;Mon - Fri
(setq days-before (+ 7 (1- dow))))
)
(format-time-string
"%Y/%m/%d"
(encode-time 0 0 0 (- day days-before) month year dst zone)))
0221デフォルトの名無しさんNGNG
参考になりそうなのが hnf-mode.el にあるよ。
0222名無しさん@EmacsNGNG
>>220
質問者です。
最終的に先週の日付を求める部分はこうなりました。

(defun my-last-week-day (n)
(let* ((d-time (decode-time))
(youbi (nth 6 d-time)))
(setcar (nthcdr 3 d-time)
(- (nth 3 d-time) 7 (- youbi n)))
(decode-time (apply 'encode-time d-time))))

(format-time-string
"%Y/%m/%d"
(apply 'encode-time (my-last-week-day 1)))
=>"2002/01/28"

考えてみたら月曜だけじゃなくて先週一週間分の日付が必要だったので、
n が 1 の時は月曜、2 なら火曜、、、の日付を返すようにしました。
;; 普通は 0 から?

変数名、関数名は適当です(w
修正しやすいかどうか分かりませんが、今見たら自分でもちょっと…(w

;; ズルをして某板でも質問をしたかもしれません(-_-)ウツダ
0223名無しさん@EmacsNGNG
あ、あと土日のことは全く考えてませんでした。
土日に使うことはないかなぁと思って。
0224デフォルトの名無しさんNGNG
>>221
hnf-float-time で浮動小数点型にして、適当な演算後に hnf-time-float で
リストに戻しているが、そこの処理のおかげで Nemacs で動かないという(藁

そういえば Emacs21 には float-time という built-in が追加されたけど、
time-float はないのよね。
0225デフォルトの名無しさんNGNG
>>244
フォローありがと。
0226225NGNG
う。>>224 ね。
0227名無しさん@MeadowNGNG
メンテ上げ。
#もう落としてしまった方がいいんだろうか?

おまけで、遅い quick sort。
ほとんどパクリだが stable にしてみた。

(defun qsort2 (cmp l)
(let ((q2 (lambda (l1 m l2 l)
(if l
(if (funcall cmp (car l) m)
(funcall q2 (append l1 (list (car l))) m l2 (cdr l))
(funcall q2 l1 m (append l2 (list (car l))) (cdr l)))
(append (funcall q1 l1) (cons m (funcall q1 l2))))
))
(q1 (lambda (l)
(if l
(funcall q2 nil (car l) nil (cdr l))
)
)))
(funcall q1 l)
))

;;使い方
(qsort2 'car-less-than-car '((4 . "4") (2 . "2") (1 . "1")
(2 . "3") (3 . "3") (5 . "5") (1 . "2")))
0228デフォルトの名無しさんNGNG
age
0229デフォルトの名無しさんNGNG
(let ((x 0))
 (defun foo ()
  (setq x (+ x 1))))

(foo) ==> Error: Symbol's value as variable is void: x

ってなるけど elisp てこういう仕様なの?Common-Lisp だと下のように
なるんだけど。

(foo) ==> 1
(foo) ==> 2
:
0230デフォルトの名無しさんNGNG
closure が無いんじゃないの?
0231デフォルトの名無しさんNGNG
XMLSchemaに対応したメジャーモードなんていつごろ完成するかな?
そんなの作ってるなんて聞いたことないし。自分で作れてってことだね。
これは。

それにしてもUNIXな人たちはXMLになんであんなに無関心なんだ?
0232名無しさん@XEmacsNGNG
(require 'cl)

(lexical-let ((x 0))
(defun foo ()
(setq x (+ x 1))))
0233デフォルトの名無しさんNGNG
`:foo' みたいなシンボルはどういう時に利用してますか?
0234デフォルトの名無しさんNGNG
>>232
なるほど、ありがとう。
0235デフォルトの名無しさんNGNG
emacs lisp wizard の方、教えて下さい。

lexical scope で function を bind したいんですが、
何か方法ないでしょうか。
つまり一時的に、既存の関数の動作をかえるような
ことがしたいんです。

cl には lexical-let があるんですが、
value cell の方は lexical になるものの、
function cell の方は面倒見てくれないようです。

なぜそんなことをしたいかというと、
普通の advice では変更が無理な状況があって、
関数ごと書きかえないといけないんですが、
長々と余計なコードを .emacs に書きたくなくて。
advice でできれば数行ですむのに、
関数を丸ごと書くと百行単位になってしまうんです。

ちなみに cl には flet という便利なものも
あるんですが、残念ながらこれは lexical では
ない様子。lexical-flet みたいなのがあればいいのに。
0236235NGNG
一応報告。
その後 labels という lexical な flet があることがわかりましたが、
結局 advice では使えませんでした。

(defadvice my-test (around test)
(labels ((car ()
(my-car)))
ad-do-it))

こんな風にすると ad-do-it 内では car の bind が無効に
なるし(当り前ですが)、また ad-do-it を展開するような
macro を使っても、advice が ad-do-it を有効にするのは
関数の実行時のようなので、結局無理ということがわかりました。

もともと advice は lexical な変数や関数を考えて作ってないので、
仕方ないのですが。
0237名無しさん@MeadowNGNG
>>234,235
>長々と余計なコードを .emacs に書きたくなくて。
>advice でできれば数行ですむのに、
本当にこっちの優先度が高いのなら、元の関数をバイト・コンパイルしなけれ
ばなんとかできそうな気もするが。
0238235NGNG
>>237
自分で advice もどきの macro を作って、
一応できるにはできたのですが、(byte-compile してても OK)
しかしそうすると advice に対応できなくなって
汎用性がなくなるので、結局使うのはやめました。

参考までに書くと、こんな感じのやつ。
hoge を advice すると、結局使えなくなります。

(defmacro new-hoge ()
`(labels ((new-func () old-func))
,(symbol-function 'hoge)))
0239237NGNG
>>238
236 では書き換え対象が car だったのに、old-func に変わっちゃったわけね。
0240名無しさん@MeadowNGNG
(´-`).。oO(adviceって何だろう?)

そういえば起動時 loading adviceってあるな。
hook みたいなもんかな。
0241デフォルトの名無しさんNGNG
>>240
advice は既存の関数を書きかえる時に便利だよ。
とりあえず elisp の info でも読みな。
0242デフォルトの名無しさんNGNG
(eval-and-compile
(require 'hoge))
と
(require 'hoge)
はどのように効果が違うのか誰か教えてくだされ。
0243読まずにカキコNGNG
>242
上だと(require ..)の結果を実行してしまわないか?
0244242NGNG
;; 読まずにカキコ って……、そんなにレベル低いかなぁ。
> 上だと(require ..)の結果を実行してしまわないか?
どちらでも実行(というか評価)されるんじゃないのですか?
0245デフォルトの名無しさんNGNG
>>244
場合による。
0246名無しさん@MeadowNGNG
emacs lisp でマルチスレッドな処理ってできるんですか?
絶対無理?
0247デフォルトの名無しさんNGNG
>>246
つーかemacsのマニュアルみてよ
多分無理だと思うけど
0248Lisp 1.5NGNG
>>246
無理。process filter使って複数のprocess/network stream扱うのは可能。
0249デフォルトの名無しさんNGNG
ELF が面白い。
0250デフォルトの名無しさんNGNG
buffer local function ってできないかな?
あるバッファでだけ関数をおきかえたいっての。
できたら少し便利かも??
0251名無しさん@EmacsNGNG
>>250
あるモードでだけおきかえる、ってのじゃだめなの?
0252デフォルトの名無しさんNGNG
OOっぽくていいかもな。
0253デフォルトの名無しさんNGNG
(age)
0254名無しさん@EmacsNGNG
Emacs Lisp かじり始めの厨房です。
Perl でいうところの、
$data{'name'}='Mona';
$data{'age'}=14;
$data{'prop'}='AA';
push(@list,\%data);
みたいなデータ構造をEmacs Lispでやるには
どうしたらいいですか?
0255デフォルトの名無しさんNGNG
alist(連想リスト)かな。
(setq data '((name . "Mona") (age . 14) (prop . "AA")))

追加するときは
(setq data (cons '(hoge "foo") data))
=>((hoge "foo") (name . "Mona") (age . 14) (prop . "AA"))

;; あんま自信なし(汗
0256デフォルトの名無しさんNGNG
?\x20を評価させると 32になるので、
16進数を10進数で表示させる関数を作ろうと思いました。
が、引数で '20'が渡ってきたとして、
?\x20を生成&評価させることってできるのでしょうか?
0257デフォルトの名無しさんNGNG
>>256
お望みのままに処理すると
(eval (car (read-from-string (concat "?\\x" (number-to-string 20)))))

こうかな? マクロにすると

(defmacro my-dec-to-hex (num)
(car (read-from-string (concat "?\\x" (number-to-string num)))))

こんな感じ。でも ?\x20 を評価して 32 になるのは FSF の場合であって
XEmacs だとダメです。 それに read-from-string とか使っててダサいな。
誰かまともなの示して。
0258デフォルトの名無しさんNGNG
(car (read-from-string [string]))
を
(read [string])
でいいのでは?
どうせエラー処理しないなら
0259257NGNG
むぅ、read で直接文字列食わせれるのか。
ところで read-from-string だとどのようにエラー処理ができるのか
Info 読んでもよく分らん。よろしければ教えて。
0260デフォルトの名無しさんNGNG
質問して答えてもらったのにできたともできないとも言わない奴なんとか言え。
;; とか思うのは俺だけ?
0261デフォルトの名無しさんNGNG
>>257,258
できました。ありがとうございます。
\?\xってやってできなかったので、
Cみたいな関数つくってでガマンしてました。(w
0262256,261NGNG
>>261
こんな感じにしてみました。
ツッコミあったらよろしくお願いします。

(defun dec-to-hex-or-hex-to-dec (num)
"10進数->16進数, 16進数->10進数"
(interactive "sNum?: ")
(if (string-match "0x" num)
;; 16進数->10進数
(message "%s is %d." num (read (concat "?\\x" (car (split-string num "0x")))))
;; 10進数->16進数
(let ((int (string-to-int num)))
(message "%d is 0x%x." int int))))

0263258NGNG
>>256,257
ふたりともとってもいい人というか、関係ない文字を渡されたときのこととか考えてないのね。
エラー処理とは、そういうことを指してました。
ちなみに、elispレベルのエラー処理をするなら、condition-caseで引っかけるのが普通でしょう。

>>262
せっかくなので、ちょっとだけ。
機能的には、大文字にも対応できるようになったはず。

(defun dec-to-hex-or-hex-to-dec (num)
"10進数->16進数, 16進数->10進数"
(interactive "sNum?: ")
(let ((case-fold-search t))
(if (string-match "^0x\\(.+\\)" num)
;; 16進数->10進数
(message "%s is %d." num (read (concat "?\\x" (match-string 1 num))))
;; 10進数->16進数
(let ((int (string-to-int num)))
(message "%d is 0x%x." int int)))))
0264257NGNG
>>263
> >>256,257
> ふたりともとってもいい人というか、関係ない文字を渡されたときのこととか考えてないのね。
> エラー処理とは、そういうことを指してました。
> ちなみに、elispレベルのエラー処理をするなら、condition-caseで引っかけるのが普通でしょう。

うん、だから condition-case は使うとして、エラー処理における read-from-string の
read に対する優位性について知りたいのです。よろしければ。

あと、XEmacs は (char-to-int (read "?\\x10")) とすれば 16 が返ります。
;; int-to-string は number-to-string のエイリアスなのに、char-to-number がない
0265258NGNG
>>264
signalが発生するような場合ではどっちを使っても大差ない。
read-from-stringに渡せる2つの追加パラメータと、返り値のcdrの情報が利用できるだけです。
readだとall or nothingなので。
0266デフォルトの名無しさんNGNG
>256
>?\x20を評価させると 32になるので、
とあるけど、これはあくまでchar型を16進表示したものだから、
16進数を10進数に変換させるには不適当。

(char-to-int (read "?\x200")) ;; XEmacs なもんで(^^;
-> 32

(read "#x200") ;; こっちが正解
-> 512
0267257NGNG
>>265
さんくす。

>>266
> (read "#x200") ;; こっちが正解
> -> 512

これ、FSF でも 21 から使えるようになってるみたいですね。
0268256,261,262NGNG
>>263
match-string()なんてのもあったのか。サンクス。

>>266
XEmacsは使ってないのですが、とりあえずメモっておきます。
サンクス
0269デフォルトの名無しさんNGNG
>>250
(current-buffer) を見て分岐する様な関数に置き換える、とか…
…何か問題が出そうで恐いけど。
0270デフォルトの名無しさんNGNG
自作のライブラリなら funcall すればいいけど、built-in の普通の
関数だとやっかいそうな気がするね。
まぁ、ふつう advice で切り分けるんだと思うけど。
ところで2重、3重に advice が重なると、それらの適用順とか
どうなるんだろう。前から気にはなってるが調べる気力がない。
;; それ以前に知力もない
0271デフォルトの名無しさんNGNG
defun と defsubst の使い分けの基準はどんなとこなんでしょうか。
たぶん高速化のために inline 展開したいような関数とか、
(nth 3 list) だけなようなものに使うんだろうと思うけど、
そこそこの size のある関数で、それほど速度も要求されてなさげな
ものでも defsubst されてるのを見ると分らなくなってきました。
0272デフォルトの名無しさんNGNG
age
0273デフォルトの名無しさんNGNG
あのぉ、質問なんですけど、ウィンドウをスプリットするにはどうすればよろしいでしょうか?
0274デフォルトの名無しさんNGNG
C-x 2
http://www.sr3.t.u-tokyo.ac.jp/~takekawa/gnujdoc/emacs-20.6/emacs-ja_toc.html
まぬある嫁
0275273NGNG
>>274
そのまぬあるすごいです。わぁい。
いーまっくす・りすぷでやるには、どういう関数を使ったら
よろしいですか?
0276Lisp 1.5NGNG
>>275
split-window-vertically

M-x help-for-help k C-x 2
0277273NGNG
>>276
できました。おぉー・・。
ありがとうございます!
へるぷクエストへいざ。では。
0278デフォルトの名無しさんNGNG
下がってんな、下手したら落ちるんちゃうか。
0279デフォルトの名無しさんNGNG
>>278
UNIX板の方が盛況だね。
あっちはemacsが普段の環境って人もいるし。話も出やすいんでしょう。
0280KOKUYONGNG
質問!!member関数を、第2引数のリストの深いレベルまで
第1引数を探索して取り除くように拡張した関数はどうやって
作ればいいんですか?
0281デフォルトの名無しさんNGNG
>>280
kazu さんの「リスト遊び」を読んでみると楽しいよ
0282デフォルトの名無しさんNGNG
>>280
マルティは市ね
0283PLUSNGNG
>>280
ループ判定までやろうと思うと、結構面倒そう
0284名無しさん@EmacsNGNG
(eval-after-load "hoge"
'(progn
(fset 'old-homo
(symbol-function 'homo))
(defun homo ()
・・・・・・・・・・・)))

何てしたときに、
homoのデバッグが出来ません。

なんか方法があるの?
0285デフォルトの名無しさんNGNG
いってる事がよく分からん。
デバッグできないとは homo() を後から edebug しようにもできないのか?
にしても、homo() だなんて、レス付けるのも嫌な関数名にしやがって。
0286Lisp 1.5NGNG
>>284
「homoをbreakpointに指定したのに止まらない。」
とお前は言いたいのだろう。
debugger何使ってるの? edebugでも駄目か?

0287284NGNG
>> 285
>> 286
.emacs.el内で、homoをoverwriteして
その中でbreakpoint設定してます。
edebugです。

homo内で止まってくれないんです。


0288Lisp 1.5NGNG
>>287
ちゃんと調べずに聞き返すけど、
edebug.elじゃなくて、debug.elってことはない?
debug.elはsymbol-functionを書き換えるから。
0289名無しさんNGNG
誘導ポイント…ごめん、何のことかわかんないこのスレの人たち↓
LISP Scheme Part5
http://pc.2ch.net/test/read.cgi/tech/1023091882/260-
0290名無しさんNGNG
しまた、誘導ポイント間違えた…逝ってきます。
0291デフォルトの名無しさんNGNG
もしEmacs Lispでlinuxが書けたら、emacs上でlinux がうごくんですよね?
0292デフォルトの名無しさんNGNG
>>291 ええと、実はすでにEmacsとLinuxが使ったときの感じとして
同じというか。現状で(学問的に)OSがどう定義されているのか
不勉強で知らないのですが、使った感じはOSそのものです。
Emacs上で動くアプリケーションは、ネットニュースリーダー、
WWWブラウザ、2chブラウザ、エディタ、統合開発環境など。
その他、だれかが
「これはEmacs Lispでは書けないな」とどっかでelisperに言ってしまうと、
それがどこからともなく、 comp.emacs.sources (かな)
にでて来るかもしれないというのは面白いよね。

ここらへんで、「おまえOSになりたいとコソーリ思っているのだろう!」
とEmacsを嫌いになる人もいるけど、これは考え方の違いだから
しかたないよね。

0293名無しさんNGNG
>292 OSってーか、シェルのような気もする。
0294デフォルトの名無しさんNGNG
>>293 そうだよね。でも俺が言おうとしたのは、
窓口はシェルだけど、じっさいに欲しいものがあるのは
その奥にあるOSという感じで言ってみたんだけど。

0295デフォルトの名無しさんNGNG
OSやシェルというよりはミドルウェアのように感じる。
0296名無しさんNGNG
elisp で、「漏れがどれくらい激しくメモリを使っているか」を調べられないのかな?
0297デフォルトの名無しさんNGNG
>>296 Elisp マニュアルのガベージコレクションというノード(ページ見たいなもの)
にたぶんそんな感じのものがあるとおもいます。

0298デフォルトの名無しさんNGNG
よしっ、今日はもう酒が入っちゃったけど、ラブアンドピースで
elispをやるか。寝言みたいなこといってすまん。
0299名無しさん@カラアゲうまうまNGNG
がんばってくれ。ラブアンドピースで。
0300298NGNG
>>299 そうなんだよ、ムシャクシャしたときは、
elispハックすると不思議とおだやかな気分になるんだよな。
ってこんな雑談はしていいのだろうか。
0301298NGNG
>>300 そうそう、そんでEmacsをどんどん進化させてみるか、みたいな。
0302名無しさん@カラアゲうまうまNGNG
elisp meditationか。カリスマのなせる技、か?
0303デフォルトの名無しさんNGNG
>> 302 いやカリスマとかなんとかより、そういう感じで
ストレス解消してる人って結構多いぞ。俺はソフトウェア
関連の職についているけど、みんななんていうか、
自分の思いどうりに開発できる俺プロジェクトみたいなの
持っている人ってけっこういるぞ。


0304名無しさん@カラアゲうまうまNGNG
ま、そりゃ分かる。
0305デフォルトの名無しさんNGNG
それで万に一つ金にでもなりゃ、ラッキーみたいな。
まぁシェアウェアにするのも一つの手かもしれないけど、
ストレス解消で書いたものでサポートまでするのめんどうだ
っていうんで、無料で配っちゃっている友だちもいるけどな。

0306デフォルトの名無しさんNGNG
俺はいまはベロベロに酔っ払ってすでに意識がどうなっているのかあやしいのだけど
まともじゃないかもしれないが、日本のソフトウェア界って、自慢システムみたいな
のはないのかな? いや、なんていったかなrubyの松本さんが認定されたみたいな
企画があった気がしたんだけど、傲慢ないいかただけど「そりゃそうだろうけど、
釣れるとかいう言葉を(俺は今なら別に全然平気なんだけど)使ったら
侮辱ととるすごく若い優秀な人がいるんじゃないの?」と思っちゃうんだよね。
いやちょっとアメリカにかぶれていんだけど、アメリカはなんつーか自慢したもの勝ち
みたいな感じなんだよね。別にそれが全然すごいことじゃなくても、なんていうか
あ、今回の宝くじははずれでしたみたいな感じで、どんどんどんどんやってみると
いうか、それで、その宝くじがハズレでも、みんな「ああ残念だけどハズレちゃった
ね」みたいなかんじで、「じゃもしかしたら次は当たりかもね、ガンバレヨ!」って
感じかな。そんで、俺は意識したことがないんだけど、よくよく考えてみるとRMS
つまりFSF(フリーソフトウェアファウンデーション)を創設した
リチャードストールマンが日本の偉い人に「日本に来てやってみない?」と
誘われたんだけど「僕のいるばしょは日本にはないような気がする」といったって
何か雑誌で読んだのだけど、もしかしてこれってそういう感じなのかなと、
おこがましくも感じてしまいました。

0307306NGNG
いや、もちろんアメリカだって「そんな外れ宝クジたくさん勝ってバカじゃねーと」
という人はたくさんいるだろうけど、雰囲気として勝ったもんがちみたいな感じね。
そんでRMSみたいに「そりゃ金もたくさんありゃ面白いかもしれねーけど、
プログラミングを究めたほうがもっとおもしろいぜ!!」みたいな人もいると。
でもRMSは最近プログラミングしてんのかな?

0308デフォルトの名無しさんNGNG
>>307 あーごめんごめん。RMSの目標はフリーソフトウェアだったな。
しかし、そこまで視野を広げるって凄いな。
0309デフォルトの名無しさんNGNG
>> 308 それとそういうことをした結果として起こることを引き受ける覚悟みたいな
感じかな。
0310名無しさん@カラアゲうまうまNGNG
>>306
rubyのって、IPAの未踏ソフトウェア創造事業とかいうやつかな。
0311デフォルトの名無しさんNGNG
>> 310 そうじゃない。でもあれはあれで
金銭的に厳しいけど志があるハッカー(すごいプログラミングをする人という意味)
を最低限救済するシステムとしては、機能してるとおもうけど。
0312311NGNG
「そうじゃない」というのは「そうだとおもうよ」という意味ね。
0313名無しさんNGNG
ようやく customize まわりの使い方がわかった…
0314ななしさん@お腹いっぱいNGNG
Emacs から C で書いた関数を呼び出したいんですが、
どのような方法があるのでしょうか?

dynamic loading というやつ(←まだ内容が良く分かってない)
以外にもやり方があるのでしょうか?
0315ななしさん@お腹いっぱいNGNG
w3 と lookup が必要ですが、英辞郎 on the Web を引いてみますた。
http://www.alc.co.jp/

(defun eijiro (pattern &optional mode)
"Look up PATTERN in the online Eijiro dictionary.
MODE should be \"ej\" for English-Japaneseor
or \"je\" for Japanese-English."
(interactive (lookup-pattern-input))
(let ((cgi "http://home.alc.co.jp/db/owa/eijiro_red2")
(word-prefix "word_in=")
(mode-prefix "type_in=")
;(url)
;(hexified-pattern)
(top-margin 15))
(or mode (setq mode "ej"))
(setq hexified-pattern (url-hexify-string pattern))
(setq url (concat cgi "?" word-prefix
hexified-pattern "&" mode-prefix mode))
(w3-fetch url)
(message (concat "Looking up : " pattern ))
(set-window-point (selected-window) (point-min))
(scroll-up top-margin)))

英日/日英 自動切換えはまだです…
(やりたいという意思表示は &optional mode あたりに…)
xemacs 21.4 (patch 6) でしか確認してません。
0316ななしさん@お腹いっぱいNGNG
>315 すんません、なんか let の中で変数がコメントアウトされてます。まちがい。
0317デフォルトの名無しさんNGNG
>>315
「自慢の.emacsを貼り付けよう」スレって知ってる?
自動切換え可能になったら是非自慢して下さい。
0318ななしさん@お腹いっぱいNGNG
>>317 了解しますた。でも「マルチポスト」っておこられないかな…(怖
0319英辞郎 on the WebNGNG
あとまわしになっちゃいましたが、↓のひとたち、ありが�d
http://pc.2ch.net/test/read.cgi/tech/1004551074/317
http://pc.2ch.net/test/read.cgi/linux/1021865124/227
0320名無しさん@EmacsNGNG
なんかネタ無いー?
7行で書けるようなネタ無いー?
0321名無しさん@EmacsNGNG
関数名って半角カナとかでもいいんですね。*scratch* で遊んじゃった。
まともに役に立ちそうな使い方が思いつかないけど。

(defun ゚Д゚ () (message "ゴルァ!")) ;; ここで C-j
゚Д゚

(゚Д゚) ;; ここでもういちど C-j
"ゴルァ!"
0322デフォルトの名無しさんNGNG
>>321 知らんかった。

(defun ・∀・ ()
(goto-char (1- (point)))
(princ "イイ!!")
(newline))
0323デフォルトの名無しさんNGNG
navi2ch で使われてるシンボルを AA にしよう。
0324デフォルトの名無しさんNGNG
なんか役に立つ使い方無いかなー。うーーん。(←本末転倒)

ところでC言語で

#define _
for(;_;){
}

で無限ループってのがあったね。等幅フォントだと泣いている顔に見える。
0325デフォルトの名無しさんNGNG
>>323
入力がめんどくさい。
0326名無しさん@カラアゲうまうまNGNG
>>323
逆か?
0327デフォルトの名無しさんNGNG
あげ
0328デフォルトの名無しさんNGNG
なんだなんだ?
0329デフォルトの名無しさんNGNG
listの中の要素数を調べる関数ってありますか?
↓現状、こういうことしているんですが。。。

(defvar alist '(("111") ("222") ("333") ("444") ("555")))
(("111") ("222") ("333") ("444") ("555"))

(let ((num 0))
(mapcar
(lambda (mem) (setq num (1+ num))) alist)
num)
5
0330 NGNG
>>329
length
0331デフォルトの名無しさんNGNG
Emacs Lisp よくわからんがこんなの
(defun length (x)
(cond ((eq x ()) 0)
(t (+ 1 (length (cdr x))))))
0332329NGNG
>>330
サンクス

Emacs21.2だと lengthは built-inになっていますけど、
実際のところどういうふうに実装されているのでしょうか?
Cで書いてるの?
0333デフォルトの名無しさんNGNG
Cでしょう。こんな感じで

int length(obj x)
{
int i = 0;

while (pair(x)) {
i++;
x = cdr(x);
}

return i;
}
0334デフォルトの名無しさんNGNG
>>332
built-in関数はCで書いてある。
引数がリストの時の処理はだいたい↓みたいな感じ。
(defun my-length (list)
(let ((num 0))
(while list
(setq num (1+ num)
list (cdr list)))
num))

>>331
それだと長いリストを渡すとstack overflowしちゃう。
elispは末尾再帰もしてくれないので、リスト処理はループに展開するのが
定石っぽい。
0335デフォルトの名無しさんNGNG
doってあったかな。

(do ((a alist (cdr a))
(i 0 (+ i 1))
((null a) i))
0336329NGNG
>>333
サンクス。勉強になりますた。

関係ないけど、最近Cでも (if ... とか
variable = if(...).. とか書きたくなってしまう。(-_-)ウツダ
0337デフォルトの名無しさんNGNG
>>335
(require 'cl) すれば使える。
0338デフォルトの名無しさんNGNG
Olin Shivers: History of T
http://www.paulgraham.com/thist.html

>I asked RMS when he was implementing emacs lisp why
>it was dynamically scoped and his exact reply was that
>lexical scope was too inefficient.

0339デフォルトの名無しさんNGNG
やくせ
0340Lisp 1.5NGNG
RMSがemacs lispを実装しとった時に「なんで動的scopeやねん?」と聞ーたら、
「静的scopeは非効率すぎー」とはっきり言うたよ。ほんまやよ。
0341_NGNG
emacsでHOMEを一回押したらback-to-indent。そこでもう一回押したら行頭にいく
ってできますか?昔VisualStudioかDelphiのエディタで重宝した動きなんですけど・・・
0342デフォルトの名無しさんNGNG
>>341
(defun my-back-to-indentation-or-beginning-of-line ()
(interactive)
(let ((p (point)))
(back-to-indentation)
(if (= p (point))
(beginning-of-line))))
こんな感じでどう?
0343Lisp 1.5NGNG
>>340
う〜ん「静的scopeじゃあうまくいかんのよ」くらいかな?
"window/buffer/frame local variable"なんかは動的scopeの方が親和性高いし。
0344デフォルトの名無しさんNGNG
>>343
うーん、そうかなあ。
(let ((var 'hoge)) (with-current-buffer buf (func var)))
とかvarがbuffer localなのを忘れてやっちまった場合、なんで挙動不審なの
か悩むことになる。

ところで、CVSをのぞいてみると、lexbindってブランチがあって、
lexical scopeもbuilt-inでできるように作業してるみたい。
0345_NGNG
>>342
thx! またemacsがパワーアップ。どこまで逝くんだろう。。。
0346デフォルトの名無しさんNGNG
もっと、名前空間を功く使えれば…って思う。
buffer とかだけじゃなくて、他の物にも local な変数が欲しくなったりするし…

global の変数の方が、動的の恩恵を受けてそうな気がするな…
let で気軽に束縛して、引数みたいに使えるから。
…本当は、引数にした方が良いんだろうけど。
0347真性厨NGNG
さあ、おまいら、存分に叩いてください。

(defun get-token ()
(defun hogehooloop (s)
(let ((ended nil))
(while (not (eobp))
(let ((c (char-befor)))
(if
(or (= ?\r c) (= ?\n c) (= ? c) (= ?\t c))
(setq ended s)
(setq s (cons c s))))
(forward-char 1))
ended)
(let ((chars (hogehooloop '()))
(and chars (getStringFromList (reverse chars)))))))
0348デフォルトの名無しさんNGNG
>>347
えーと…これって、 elisp なんだよね?

・内側の defun って、多分 local にならないと思う。
こう云う使い方なら、 cl の flet とかを使う方が良いんじゃないかな…

・hogehooloop では、引数の s を書き換えてるのに、返してるのは ended だね…
buffer の最後迄走査して、空白とかを除いて、 list にしてるけど…
それは普通、 token って呼ばなそう…
もしかして、 ended も while の条件だったり、返す値が違ったりしない?

・細かい事だけど、 char-befor -> char-before だと思う。

・最後の and は、 when を使う方が分かり易いんじゃないかな。

・あと、 getStringFromList って、標準の関数?
見付からなかったけど…
0349真性厨NGNG
>>348 おまえ、まことにありがとうございますです。

はい、
×(while (not (eobp)) → ○? (while (not (or eobp ended))
ですた…。

あと、getStringFromListは、そういう関数がここにほしかったけど、
みつかりませんでした。ユーザコードでは書けなそう山車。
こういうときどう探すんですか?
C-h f ^i で出る候補のバッファで、それっぽい
キーワードでサーチしてるんですが…。
#↑キーバインド変えてますけど、デフォルトのバインドってことで.

>引数の s を書き換えてるのに、返してるのは ended だね…
これだとsをwhileの条件に使えないので、こうなりますた。
あ、sは引数だから、呼んだ側でそれをそのまま使ってやればいいのか。でも
それってあんましよろしくないような気がするのは、漏れが厨だからでしょうか。

>えーと…これって、 elisp なんだよね?
いひひひひ…。厨の糞コードの見本ですかね。。。
0350 NGNG
>>347
普通、こういう処理をするときは、
・skip-chars-forward + buffer-substring
・looking-at + buffer-substring
などを使うのが常套手段だ。

どうでもいいけど、括弧が全然合っていないのだが。
0351デフォルトの名無しさんNGNG
>>349
getStringFromListに相当するのはconcatかな。
0352真性厨NGNG
>>350,351 おまいら、はげしく感謝いたします。

>concat
そ、それだぁ! 激しくキホソの予感。鬱氏。

>・skip-chars-forward + buffer-substring
>・looking-at + buffer-substring
なるほど。こいつぁいいです。
というより、こうしない漏れがアフォなんですな。

ううむ、無理してスクラッチからこんな糞コード書いてるより、
先人のコードいじりからはじめて
こういういろんな関数と言うか、常套手段を会得した方が速いのでしょうか。

しかし、まともなのってみんなでかくてむずいんだよなぁ。
0353デフォルトの名無しさんNGNG
>>352
まずemacs-lisp-introを全部嫁。
0354デフォルトの名無しさんNGNG
解決したみたいだけど…一応返信。

>>349
> ○? (while (not (or eobp ended))
また細かいけど、 eobp は関数だから括弧が要るよ。
私も前やって失敗した…

探し物は… info 読んでからは、 M-x apropos とかだと思う。

> あ、sは引数だから、呼んだ側でそれをそのまま使ってやればいいのか。でも
> それってあんましよろしくないような気がするのは、漏れが厨だからでしょうか。
うーん… setcar とかで書き換えれば、呼んだ側からも参照出来るけど…
私も余り良くないと思う。
ended は単に t に設定して、戻り値には s をそのまま使う、とかを考えてた。
文字の判定も while の条件に含めちゃうとか。

> いひひひひ…。厨の糞コードの見本ですかね。。。
ごめん、そうじゃなくて…見慣れない関数が有ったりして、不安になっただけ。
0355真性厨NGNG
>>353 >>354 貴様ら、私はなんといって感謝すればよいのか判りません。

なるほど、Info、これですね。
http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp.html
(実はLinuxでもmanする人だったりする。逝ってよしか)
とにかく修行してまいります。

>> いひひひひ…。厨の糞コードの見本ですかね。。。
>ごめん、そうじゃなくて…見慣れない関数が有ったりして、
いや、事実極上の糞コードですから。


0356デフォルトの名無しさんNGNG
red.elどうすか?
http://nicosia.is.s.u-tokyo.ac.jp/boomborg/boomborg-red-j.html
何に使うのかわからんのですが。
0357デフォルトの名無しさんNGNG
>>356
何に使うの?
0358デフォルトの名無しさんNGNG
自慢の.emacsを貼り付けよう
http://pc.2ch.net/test/read.cgi/unix/1001393679/621
0359デフォルトの名無しさんNGNG
http://homepage1.nifty.com/blankspace/emacs/dired.html
の一番上で書かれてる関数dired-find-alternate-fileを
dired-modeになった時に呼び出す方法が分かりません。

教えてクレヨン。。
0360デフォルトの名無しさんNGNG
>>359
C-h b して探せ。
0361デフォルトの名無しさんNGNG
いや、まだキーに割り当ててないんだけど
0362デフォルトの名無しさんNGNG
>>361
なら割り当てろ。
0363デフォルトの名無しさんNGNG
いや、これってdired-mode時にディレクトリ上で
enter押しても新しいバッファを作らないようにす
るやつみたいなんだけど、それってキーに割り当
てるんじゃなくて。。
うまく説明できないスマソ
0364デフォルトの名無しさんNGNG
>>363
dired-find-alternate-file って、その場でそこにある file を開くみたいだよ。
mode の切り替えとかじゃなさそうだけど。
0365デフォルトの名無しさんNGNG
>>364
そういうことでしたか。
dired-mode-mapをどうにかこうにかすれば
いいんですね。ありがとうございました。
0366デフォルトの名無しさんNGNG
>>365
でけた
0367デフォルトの名無しさんNGNG
emacsのファイルをxyzzy形式にコンバートするツールないかな
0368名無しさん@カラアゲうまうまNGNG
>>367
elispライブラリを誰か作ってたような
0369デフォルトの名無しさんNGNG
>>368
うん。標準のはあるんだけど、それ以外をコンバートしたい。
0370名無しさん@カラアゲうまうまNGNG
>>369
いや、elispにあってxyzzyにない関数を追加するとか、動作の違いを吸収する
とか、そういうやつ。
yatexの移植か何かで作ってたんじゃなかったかな。
0371デフォルトの名無しさんNGNG
emacslisp.org が乗っ取られた

http://emacslisp.org/
0372デフォルトの名無しさんNGNG
>>370
ども。xyzzy関係のリンクにEmacs lisp 移植キットというのがありました。
ttp://members.tripod.co.jp/osuneko/xyzzy/xyzzy.html
これはelisp独自関数をxyzzyで書き直したもので、これを読み込んでも
elispのファイルが素で動くものではないみたいです。
これを元にちょっとじたばたしてみたいと思います。
0373デフォルトの名無しさんNGNG
age
0374デフォルトの名無しさんNGNG
お<age>さん
0375デフォルトの名無しさんNGNG
>>359-366
emacs21 なら a に bind されてるようですが?
0376デフォルトの名無しさんNGNG
emacs-lisp限定となると、unix板とかの方が食いつき良いかもね。
0377デフォルトの名無しさんNGNG
MobileGearのPocketBSDでメモリに制限があるため軽いnemacs使ってます。
これは、emacs18.55.1でelispの関数が今のとちょっと(だいぶ?)
違います。そこで、elファイルを書くのに、help functionで検索
しなければならず、大変です。どっかに、elisp18、19、20あたりの
対照表などありませんでしょうか。

0378デフォルトの名無しさんNGNG
時間の掛かる事を background でさせたくて、色々考えてたんだけど…
emacs --batch --no-site-file でもう一つ起動してみたら、意外に重くなかった。
w3m-antenna 風の関数で使ってみたけど、結構便利かも。
0379デフォルトの名無しさんNGNG
>>378
お手軽マルチスレッドだね。
もうちょっと、詳しく解説してくれると嬉しいです。
0380デフォルトの名無しさんNGNG
>>379
させたい処理を prin1-to-string して、 emacs --eval の引数にしてみただけ…
結果は、適当な symbol で始まる list を print して、呼んだ方が read してる。
load-path は呼ぶ時の値で設定して、 coding は binary で逃げた。
通信が print しか思い付かなかったし、あんまり凄い事はできなそう…
0381デフォルトの名無しさんNGNG
ここもこれ実行してみる!
http://pc.2ch.net/test/read.cgi/unix/1032611750/170-
(defun display-state ()
(interactive)
(let ((buf (get-buffer-create "*display state*"))
(list (buffer-list)))
(display-buffer buf)
(save-excursion
(set-buffer buf)
(erase-buffer)
(insert (format "バッファの合計数: %d\n" (length list)))
(insert (format "バッファの合計サイズ: %d\n"
(apply '+
(mapcar (lambda (x) (set-buffer x) (buffer-size))
list))))
(insert (format "読み込んでる elisp 数: %d\n" (length features))))))
0382デフォルトの名無しさんNGNG
C-xh
C-uM-|
perl -pe 's/^/\t/g'
とかやってるんですけど、
これを一つ動作でやる関数はどうコーディングすればいいでしょうか?
Mx lines-to-perl<ENTER>
s/^/\t/g<ENTER>
みたいにしたいっす。
0383デフォルトの名無しさんNGNG
>>382
そのまま、 shell-command-on-region で perl を呼べばいいんじゃないかな。
start と end は (point-min) と (point-max) だろうし。
command は… (interactive "s") あたりで渡したいのを取って、
"perl -pe '%s'" に format するとか。
output-buffer と replace は t でいいかな。

詳しくは、 simple.el にある定義とか elisp の info とかを参照。
0384デフォルトの名無しさんNGNG
あるelispをデバッグしたいのですが、どのようにすればいいでしょう。
例えば、現在カーソル付近にある文字列を読み取り外部スクリプトに
渡しているようなコマンドなのですが、
Symbol's value as variable is void:
というエラーがでますので、デバッグしたいのです。
0385デフォルトの名無しさんNGNG
>>384 M-x toggle-debug-on-error
0386デフォルトの名無しさんNGNG
>>384
あやしい関数の defun のとこで
edebug-defun する、とか。
0387デフォルトの名無しさんNGNG
[質問]

(run-at-time 3 nil 'info)

これを *scratch* で eval すると3秒後に info が
起動しますが、そこで d を押すと一度目はエラーに
なってその後 d を押してもエラーにならないのですが。
一度目のエラーは回避できますか?

エラーの原因は *scratch* では d は self-insert-char で、
info に切り替わっているのに、 self-insert-char を実行しようとして
このinfoバッファはread-only ですよと起こられるようです。

0388デフォルトの名無しさんNGNG
前の人の質問がまだ解決してないようですけど、簡単な質問させて下さい。
elispとLispとどの程度共通性がありますか。何か、大学でLispの授業が
あるんだけど、一応自分でかなりelispは作ってきたから、かなり共通な
らとってみようかと。
0389デフォルトの名無しさんNGNG
その授業schemeじゃなくて?
0390デフォルトの名無しさんNGNG
Common Lispで自然言語処理とかです。
0391名無しさん@EmacsNGNG
かなり書いてきている人間のする質問じゃないぞ。
elispのマニュアルの最初の方読めよ。
0392デフォルトの名無しさんNGNG
社会人だけど大学の授業で Lisp とか Scheme とかやるなら忍びこんで受けて
みたいな…
0393デフォルトの名無しさんNGNG
1年生の夏休みの集中講義で今は亡き中西先生のLispの講義受けますた。
かたぎの人生を踏み外した気もしますが、後悔はしていません。
0394デフォルトの名無しさんNGNG
講義って何やるの?
0395デフォルトの名無しさんNGNG
age
0396デフォルトの名無しさんNGNG
ウチの大学では scheme のインタプリタを scheme で作成とか
scheme のコンパイラを作成とかやりました。
でもこれは講義というより実習かな。
0397デフォルトの名無しさんNGNG
(setq hoge (append '(x y) hoge))を
(macro hoge x y)ってできる
マクロとかってありますか?
0398デフォルトの名無しさんNGNG
(defmacro foo (var &rest list)
`(setq ,var (append ',list ,var)))
0399デフォルトの名無しさんNGNG
age
0400デフォルトの名無しさんNGNG
hoshe
0401デフォルトの名無しさんNGNG
hoshp?
0402名無しさん@EmacsNGNG
t
0403デフォルトの名無しさんNGNG
>>393 >>396 いいなー。漏れにもなにか講義してくれ。
0404デフォルトの名無しさんNGNG
質問させて下さい。

(defun navi2ch-article-link-ml-change-period (mlname)
(let ((point 0))
(if (setq point (string-match "\\." mlname))
(navi2ch-article-link-ml-change-period
(concat (substring mlname 0 point)
"-"
(substring mlname (1+ point)))))))

として、(navi2ch-article-link-ml-change-period "mona.giko-foo.bar")
などと呼び出した場合、mona-giko-foo-bar という形で返ってきてほしい
のですが、実際には nil が戻ってきてうまくいきません。
最後に評価されている (setq point (string-match "\\." mlname)) が
nil になっているからだ、という事はわかるのですが、どうすればスマート
に書けるでしょうか?
まだ Lisp の形式になれないのか、混乱してばかりでして…
0405デフォルトの名無しさんNGNG
>>404
falseの時にmlname自身を返せばいいんじゃない?
あと、let使ってるからsetqは不用、navi2ch〜は、
↓みたいに残りの部分だけに適用するだけでいいと思う。
間違ってたらスマソ
(defun navi2ch-article-link-ml-change-period (mlname)
 (let ((point (string-match "\\." mlname)))
  (if point
    (concat (substring mlname 0 point) "-"
     (navi2ch-article-link-ml-change-period
      (substring mlname (1+ point))))
    mlname)))
0406名無しさん@EmacsNGNG
(defun navi2ch-article-link-ml-change-period (mlname)
(let ((point 0))
(if (setq point (string-match "\\." mlname))
(navi2ch-article-link-ml-change-period
(concat (substring mlname 0 point)
"-"
(substring mlname (1+ point))))
mlname)))
でいーんじゃないのか? if の condition 部分が nil のとき
(= 再帰の終わり)で値を返しましょう.
0407406NGNG
>>405 うぉ,ケコーン!!しかも漏れのがヘタレな解答をしてしまった….
そこで,ちょっと知恵を絞ってみた↓.
(defun foo (mlname)
(mapconcat (lambda (e) e) (split-string mlname "\\.") "-"))
0408デフォルトの名無しさんNGNG
navi2ch をロードしてる時に使えりゃいいなら
(navi2ch-replace-string "\\." "-" mlname t)
でいいんじゃないの?
0409デフォルトの名無しさんNGNG
"\\."ってなに?
0410デフォルトの名無しさんNGNG
何が聞きたいんだ?バッックスラッシュが二つある理由か?
それとも正規表現としての意味か?
0411デフォルトの名無しさんNGNG
>409
ただの文字列だけど。
\を2回書いているのは、本来のエスケープシーケンス文字の意味で
使われる\を、文字'\'そのものとして表すため。
(これはC言語の文字列と同じ)
文字列の内部表現は\.

さらに、この文字列はstring-matchへ正規表現文字列として
渡されるので、\はメタ文字に対するエスケープ文字と解釈される。
よって、string-matchにはただの文字ピリオド'.'を渡した事になる。
0412デフォルトの名無しさんNGNG
先生!! M-x search-forward-regexp したときは \.で良いのは何故でつか!!
0413デフォルトの名無しさんNGNG
エスケープすればいいだけだから
0414デフォルトの名無しさんNGNG
おお!すばらしいです!
>>405-408 さん、どうもありがとうございます。特に >>407 には感動しました。
mapconcat なんてのがありましたか。

実はですね、UNIX 板のキチガイスレにこんなのがありまして、
http://pc.2ch.net/test/read.cgi/unix/1037490849/89
[linux-users:90000] なんてのを、リンクにしてくれるものなんです。
ですが、[Momonga-users.ja:00002] などというのは、途中にピリオドがある
ため、元のコードじゃ使えないので、ちょっと改造しようと思いまして。
これで一応、使えるようになったかなと思いきや。別の問題が。
0415404NGNG
>>414 のつづき

(defun navi2ch-article-link-ml-put-link-property ()
"ML のタグにリンク属性を付加するって関数です"
(save-excursion
(point-min)
(while (re-search-forward
"\\[\\([A-Za-z0-9_-]+\\)[ :]+\\([0-9]+\\)\\]" nil t)
(let ((url (navi2ch-article-link-ml-get-url (match-string 1)
(string-to-number (match-string 2)))))
(and url (navi2ch-article-set-link-property-subr
(match-beginning 0) (match-end 0) 'url url))))))

という部分があるのですが、該当する正規表現の部分を [A-Za-z0-9_.-] と
いう形にしてピリオドにもひっかけようと思ったのですが、

Signaling: (args-out-of-range #<buffer "*navi2ch article http://pc.2ch.net/linux/dat/1036429182.dat"> 13 14)
signal(args-out-of-range (#<buffer "*navi2ch article http://pc.2ch.net/linux/dat/1036429182.dat"> 13 14))
byte-code("..." [window-configuration err set-window-configuration signal] 3)
navi2ch-bm-select-article(nil)
call-interactively(navi2ch-bm-select-article)

と、停止してしまいます。正規表現にピリオドを含めた事がおかしいのだと
思うのですが、[] 内にある場合は問題ないですよね?
それとも、ピリオドを含めた事で、予想外の範囲までひろってるという事でしょうか?
0416デフォルトの名無しさんNGNG
>>413 それはちっと簡潔すぎやしないか.
Emacs に評価させる elisp コードは,Lisp パーサで解釈されてから
正規表現エンジンに渡されるので, Lisp パーサが文字列作る時に
\\ が二つ必要になる.それに対して,M-x で呼んだ時は Lisp パーサ
通らねぇで直に正規表現エンジンに渡るから \. で良いんだ.
0417デフォルトの名無しさんNGNG
emacsの正規表現読みにくいね。
なんだっけ、here-documentって使えなかったっけ。
0418デフォルトの名無しさんNGNG
文字列と一緒なのがよくない。
0419デフォルトの名無しさんNGNG
つまようじ (・∀・)イイ!!
0420デフォルトの名無しさんNGNG
>>417 re-builder ツカエ。これでも嫌ならしょーがねぇ python でもツカエ。
0421デフォルトの名無しさんNGNG
>>415
> (defun navi2ch-article-link-ml-put-link-property ()
> "ML のタグにリンク属性を付加するって関数です"
> (save-excursion
> (point-min)
ここはたぶん (goto-char (point-min)) だろうね。

> という部分があるのですが、該当する正規表現の部分を [A-Za-z0-9_.-] と
> いう形にしてピリオドにもひっかけようと思ったのですが、
それと、navi2ch-article-link-ml-momonga-users.ja()
つーのを定義すればいいはず。 エラーは別の原因じゃない?
0422デフォルトの名無しさんNGNG
http://www.mew.org/~kazu/doc/elisp/regexp.html
0423デフォルトの名無しさんNGNG
>422 そこのハッシュの解説読んで Emacs21 にはハッシュがあるというの
を知りますた…
0424デフォルトの名無しさんNGNG
正規表現を入力したらそれの文字列表現を返すようなのってないんですかね

まぁすぐ書けそうな気もしますが
0425デフォルトの名無しさんNGNG
16進数を2進数やunsignedの10進数に変換するにはどうしたらよいでしょうか?

(let ((str-num "0xffffffff"))
(if (string-match "^0x\\(.+\\)" str-num)
(message "%s is %d." str-num
(read (concat "#x" (match-string 1 str-num))))))
"0xffffffff is -1."
0426デフォルトの名無しさんNGNG
[a-z]+とかはどうするの? 無限にありますよ。
0427デフォルトの名無しさんNGNG
( ´∀`)え?
0428デフォルトの名無しさんNGNG
>>424
(prin1 (read-string "re: "))
みたいな感じてこと?
0429デフォルトの名無しさんNGNG
>>421
うわー、まったくその通りでした。
関数名にはピリオドだめだと、勝手に決めつけてました。コロンが OK なの
は知ってましたが、ピリオドも通るんですね。

うまく動きました。ありがとうございます。
0430デフォルトの名無しさんNGNG
>>424
regexp-quote か?
0431424NGNG
(prin1 (read-string "re: ")) でだいたいやりたいことができました。
こんなのあったんですね。
0432デフォルトの名無しさんNGNG
>>425
(string-to-int "1010" 2)
(string-to-int "ffff" 16) -> 65535
こんな事がやりたいのか?まぁ,#x とか #b とかの prefix 付きで
read しても良いわけだが….
0433デフォルトの名無しさんNGNG
>>432
そうです。どうもありがとうございました。
0434デフォルトの名無しさんNGNG
宿題を教えてほしいんですが…

(defun diff (e a)
(cond ((atom e) (cond ((eq e a) 1) (t 0)))
((eq (op e) '+)
(make-sum (diff (arg1 e) a) (diff (arg2 e) a)))
((eq (op e) '*)
(make-sum (make-prod (diff (arg1 e) a) (arg2 e))
(make-prod (arg1 e) (diff (arg2 e) a))))))

(defun op (e) (car e))
(defun arg1 (e) (cadr e))
(defun arg2 (e) (caddr e))
(defun make-sum (x y)
(cond ((eq x 0) y) ((eq y 0) x) (t (list '+ x y))))
(defun make-prod (x y)
(cond ((eq x 0) 0) ((eq y 0) 0)
((eq x 1) y) ((eq y 1) x) (t (list '* x y))))

で、-,/,sin,cos,tan,exp,logなどを含む式も微分できるようにdiffを変更して
(* (exp (- x)) (sin (* 2 (* pi x))))を微分せよって問題です。

なんかうまく答えが出てくれなくて・・
0435デフォルトの名無しさんNGNG
((eq (op e) 'sin) (make-prod (list 'cos e) (diff e))
0436デフォルトの名無しさんNGNG
(if A B)
(when A B)
(and A B)
どれが好き?
0437デフォルトの名無しさんNGNG
ifでお願いします。
0438デフォルトの名無しさんNGNG
短いのなら if で、長いのなら when で…かな。
and でやるのはちょっと変則的な気がして、あんまり好きじゃない。
0439デフォルトの名無しさんNGNG
(if A (progn B C)) は (when A B C)
(if A (if B C)) は (if (and A B) C)
で書くかな。
書いてる時の気分によるところが最も大きいような気もするけど。
0440デフォルトの名無しさんNGNG
(and A B C)
0441デフォルトの名無しさんNGNG
>>435 お主もワルよのぅ。漏れも人のためにならないこと大好き。ケケケ。
((eq (op exp) 'sin)
(make-product (diff (arg1 exp) var) (list 'cos (arg1 exp))))
((eq (op exp) 'cos)
(list '- (make-product (diff (arg1 exp) var) (list 'sin (arg1 exp)))))
0442デフォルトの名無しさんNGNG
else 部が無いやつは when で書きたい。(if cond then) ってなんか嫌。
(if cond (prog A B C)) はすげー嫌。完全に個人的な趣味だが。
0443434NGNG
。・゚・(ノД`)・゚・。
0444デフォルトの名無しさんNGNG
((eq (op e) 'exp)
(make-product e (diff (arg1 e) a)))
0445デフォルトの名無しさんNGNG
で,最近ネタ不足なわけだが,>>434 よ,調子はどーよ?
0446デフォルトの名無しさんNGNG
return も break もないのが不便で仕方ありません。
何とかごまかす方法は無いでしょうか。
0447名無しさん@カラアゲうまうまNGNG
returnとかreturn-fromとか。
0448デフォルトの名無しさんNGNG
まずは catch throw で、cl はもっと後でもいいんじゃないかな。
0449デフォルトの名無しさんNGNG
再帰で書け
0450デフォルトの名無しさんNGNG
とあたり前の結論が出た所で、
(defmacro def (name args &rest body)
`(defun ,name ,args (catch 'RETURN ,@body)))
(defmacro return (exp) `(throw 'RETURN ,exp))
(def f (a) (return (+ a 15))
おら。すでに Lisp じゃねー気もするが。
0451デフォルトの名無しさんNGNG
returnやbreakがないなんて言ってる椰子は
まずmacroを覚えれ
0452デフォルトの名無しさんNGNG
ねた切れ sage
0453デフォルトの名無しさんNGNG
ネタ振り.S 式で書いて HTML に変換しよーとしたんだが,なんかイマイチ.
----BEGIN BASE64----(sexp2html.el.gz)
H4sICMq57T0CA3NleHAyaHRtbC5lbACdVcFu00AQPTdfMd1Ldw+OVbigpM0Fcaio
EIfcKIeNPY0tvLZrr0n9P77xASBx4FrR7+AzkJhZJ47tNqWQSLF3Zt7b93bGznwO
H77fNc3P3x8n8znIEu0NhNpqOJGzyJqEo0fAH1qjDvdrCtjYJgjivV4jLPleqEHe
IBERjc09vKnizyBeZ6nF1HrLOkcBs6BdgrB4a33ebw5BpAuScV7Za+/Vo4SpNshU
eV3E68j2eRJtVqEWSvV1r7KwHtBEpyCWF8vLNwP6WVQMqnIQJd7m3oJ1QalNnuDx
8UhR1TshXicx/WgQbHrm+5vNZlrrKMumQWZ8AeLy4t1boUhoXNrTAVcLdokXhxIv
B85ajVFlzHQ6fcKKakHNXfOl+dr8+Parud82u3PHLVeTiQzxukrB6rW3KG0Rp2uQ
tFBUW612gbI2qyzxXBdc8pT490hLrXUoSEpLSINmhQXsAl1pzm32XEclJybkJ05L
LKiNZxwWLmR0HuiCSlxnQaKaOFuSeh6ClJ+w3mRFmAOqDs+5QBMPfWXfDNWIc8Hn
cUQkUrbhx7FXQgCguyrlIABjneAvrlLuydCUToMoK/a2EiReuYuynfYkjlgASJ3n
SQ0n241lEG7zisHwUNmZhqjA63NWuCUllQsxqifuYUCc+Xrh3O/k9iZA2gLRqeWD
ZZyUrDatkgRcjoTazLT37Vb7A3Sm2sxI8yje35GNDth4xPO/YP6Fr5uNB7CdR67q
ZrYr4pcfT6Aiz/0xHW1wGNxDdl1/LnZV8OO7q3qk+6OZ7nnrDeQW/MTxUNb+1x6L
Hv8mwhQOGHG7uj8NcK9goJclzLJE7R828QyxBzX6T4p0zO2DO/kDTW9JqeYGAAA=

----END BASE64----
0454デフォルトの名無しさんNGNG
http://harukat.hp.infoseek.co.jp/lisphtml/about_lisphtml.html ?
0455デフォルトの名無しさんNGNG
どうせなら AllegroServe 互換に汁 !!
0456デフォルトの名無しさんNGNG
html→S式もできないと使い道無いよ
0457453NGNG
>>454 そんなのがあったのか…知りませんでした。こーゆうのに合わせるべきか?
>>455 なにそれ?
>>456 すまぬ。漏れは「S 式だとインデントが楽」とか「ページ内の
H[1-5] タグを検索してインデックス作成」くらいしか考えてなかった。

つまらんネタを振って申し訳ない。逝ってきます。
0458デフォルトの名無しさんNGNG
保守 age
0459デフォルトの名無しさんNGNG
(setq animals '(("giraffe" . (a1 a2))
("gazelle" . (b1 b2))
("lion" . (c1 c2))
("tiger" . (d1 d2))))

上のlistから
("giraffe" "gazelle" "lion" "tiger")
なlistを作りたいので

(defun print-elements-of-list (list)
(let (q)
(while list
(setq q (append (caar list) q))
(setq list (cdr list)))
(print q)))

としましたが、
(116 105 103 101 114 108 105 111 110 103 97 122
101 108 108 101 103 105 114 97 102 102 101)
となってしまいます。

どうすれば良いですか?
0460デフォルトの名無しさんNGNG
>>459
(mapcar #'car animals)
0461デフォルトの名無しさんNGNG
>>460
function で quote してるのはなんで?
0462459NGNG
>>460

ぐっ、勉強不足でした。
ありがとう。
0463デフォルトの名無しさんNGNG
>>461
便乗質問、しつれいします。

(mapcar (lambda () (hogehoge)) foobar))
(mapcar '(lambda () (hogehoge)) foobar))
(mapcar #'(lambda () (hogehoge)) foobar))
(mapcar (function (lambda () (hogehoge))) foobar))

これらはどう違うんでしょうか? (3番目と4番目は同じ?)
ふつーはどうすべきなんだろう?
0464デフォルトの名無しさんNGNG
>>463
2番目以外は全部同じ。バイトコンパイルしないなら2番目も同じ。
普段は1番目でいいんじゃない?
0465デフォルトの名無しさんNGNG
わーぉ、
lambda → (function (lambda ...

マクロだった・・・

0466デフォルトの名無しさんNGNG
((lambda (x) (* x x)) 10)
('(lambda (x) (* x x)) 10)
(#'(lambda (x) (* x x)) 10)
((function (lambda (x) (* x x))) 10)
0467デフォルトの名無しさんNGNG
call-process で起動するprocessの引数にダブルクォーテーションも
含めて文字列を渡したい時どうすればよいですか?

(call-process "c:/usr/local/bin/foo.exe"
nil nil nil "hoge hage")

これだと
$> c:/usr/local/bin/foo.exe hoge hage
になってしまいますよね
$> c:/usr/local/bin/foo.exe "hoge hage"
にしたいんです。

"\"hoge hage\"" "\\"hoge hage\\"" とかやってみましたが
上手くいきませんでした。
0468デフォルトの名無しさんNGNG
>>467
> "\"hoge hage\"" "\\"hoge hage\\"" とかやってみましたが
前者で渡るはず。
上手くいかないのはfoo.exeのせいじゃないのかな?

> これだと
> $> c:/usr/local/bin/foo.exe hoge hage
> になってしまいますよね
> $> c:/usr/local/bin/foo.exe "hoge hage"
> にしたいんです。
この辺からして違ってそうなので、本当に期待している動作からして怪しいが。
#本当にそういうシェルだったら御免ね。
0469デフォルトの名無しさんNGNG
>>468
>前者で渡るはず。
>上手くいかないのはfoo.exeのせいじゃないのかな?
やっぱ、ダメでした。

c:/usr/local/bin/foo.exe "hoge hage"
だとチャント動くので、も少し粘ってみます。


0470デフォルトの名無しさんNGNG
ファイルのパスの空白とか渡す時にそーゆうことするわな。
本当に期待どーりに動いてるか edebug で調べてみれ。
0471デフォルトの名無しさんNGNG
>>468
>>470
すまんです。
思い出しました。

$> c:/usr/local/bin/foo.exe "hoge hage"
この例からもわかるとおり、cygwin環境です。
emacsは、IMEとmouse cursorパッチを当てたNTemacsで
argument editting 拡張されているのを忘れてました.

でも、
c:/usr/local/foo.exe /t hoge.txt "bar boo"
と指定は出来無そうだ。

お騒がせしました。
0472468NGNG
>>467,471
とりあえずこれが間違ってるな。
> call-process で起動するprocessの引数にダブルクォーテーションも
> 含めて文字列を渡したい時どうすればよいですか?
含めたいのは引用符じゃなくて空白なわけね。
0473デフォルトの名無しさんNGNG
>>472
いいえ、
スペースを含んだ文字列を引用符で囲ったものを
引数に指定したいんです。
0474デフォルトの名無しさんNGNG
>>473
スペースを含んでる文字列は引用符で囲って渡されるんじゃないの。
0475デフォルトの名無しさんNGNG
>>471
> c:/usr/local/foo.exe /t hoge.txt "bar boo"
> と指定は出来無そうだ。
え?何でできないの?
0476デフォルトの名無しさんNGNG
(call-process "c:/usr/local/bin/foo.exe"
nil nil nil "hoge hage")

でいいんじゃないの?
確かスペースがどうのとか考えなくてもよかった気がする
0477デフォルトの名無しさんNGNG
>>474
>>475
>>476
IMEパッチでは、argument editting拡張されていて
引数の渡し方が、色々操作できるんです。
(mw32misc.el参照)

バニラNTEmacsでは、それでOKなんですが、
IMEパッチ適用でdefaultの挙動が変わってしまってます。

それで、
define-process-argument-editing
を色々いじってるんですが、上手くいきません。

質問を変えると、
バニラNTEmacsと同じ挙動をさせるには,
define-process-argument-editing
をどのように指定したらよいか教えてください。

#板違いかな
0478デフォルトの名無しさんNGNG
ifでお願いします。
0479デフォルトの名無しさんNGNG


ひ  ろ  ゆ  き  必  死  に  な  っ  て  る  な  w

 マ ス ゴ ミ の 報 道 に な ん て 反 応 し な い で 

無 視 し と け
0480デフォルトの名無しさんNGNG
無理
もともとかなりのヘタレだから
0481IP記録実験NGNG
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0482デフォルトの名無しさんNGNG
記念真紀子たん(゚∀゚)
0483デフォルトの名無しさんNGNG
言 い た い こ と も 
      言 え な い こ ん な イ ン タ ー ネ ッ ト じ ゃ
0484デフォルトの名無しさんNGNG
暴力団に殺人依頼した。管理人を入廷時に射殺する
0485デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0486デフォルトの名無しさんNGNG
>>158
同意だね。
リスクなんか気にするような奴は負け犬だね。
0487デフォルトの名無しさんNGNG
>>551
「コテハン戦隊ラウンジャー」に鑑定依頼してきますた
0488デフォルトの名無しさんNGNG
釣りのセンスないからやめたほうがいいすよ>>182

つまらないので寝ます。
0489デフォルトの名無しさんNGNG
この人じゃないの?
http://ooo.2ch.net/jikken/kako/1027/10275/1027521762.html
0490デフォルトの名無しさんNGNG


<血液型A型の一般的な特徴>(見せかけの優しさ・もっともらしさ(偽善)に騙されるな!)
●とにかく気が小さい(神経質、臆病、二言目には「世間」、了見が狭い)
●他人に異常に干渉する(しかも好戦的・ファイト満々でキモイ)
●自尊心が異常に強く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとする
(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはたいてい、内面的・実質的に負けている)
●「常識、常識」と口うるさいが、実はA型の常識はピントがズレまくっている(日本の常識は世界の非常識)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者に弱く、弱い者には強い)
●あら探しだけは名人級(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため、性格がうっとうしい(根暗)
●一人では何もできない(群れでしか行動できないヘタレ)
●少数派の異質、異文化を排斥する(差別主義者、狭量)
●集団によるいじめのパイオニア&天才(陰湿&陰険)
●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい)
●他人からどう見られているか、体裁をいつも気にしている(「世間体命」、「〜みたい」とよく言う)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度も言う、知障)
●表面上意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は個性・アク強い)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自ら好んでストイックな生活をし、ストレスを溜めておきながら、他人に猛烈に嫉妬する(不合理な馬鹿)
●執念深く、粘着でしつこい(「一生恨みます」タイプ)
●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。しかも冷酷)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(他人をけなして相対的に自分の立場を引き上げようとする等)


それと、O♀はエコヒイキきつくて、冷酷だからな。

A♂の異質排除×O♀の冷酷=差別・いじめ とあいなる。
0491デフォルトの名無しさんNGNG
>>463
電2とは何かな?
0492デフォルトの名無しさんNGNG
たしかに2ちゃんでは知るかボケとか逝ってよしとかハァ?とか一言レス
で書いたりするが、それはIPが取られてないからじゃない
0493デフォルトの名無しさんNGNG
Z武スレももう終わりか
0494デフォルトの名無しさんNGNG
保守
0495デフォルトの名無しさんNGNG
《一覧表》

ヾ(=・ω・)ゞゲリーな文系女 ◆/OQtXsetN.
あうあう ◆/OQtXsetN.
Dumm.com ◆/OQtXsetN.
オバハンコテ ◆/OQtXsetN.
馬鹿も風邪を引く ◆/OQtXsetN.
下痢女@ゲリ〜@携帯

通称ゲリーさんです。
私が腐れ30男さんのスレから拉致しました。
批判要望・電2板によくいらっさいます。

住人じゃない人も知っている事を書き込んで、楽しいでふか?粘着くん。
0496デフォルトの名無しさんNGNG
串揚げ
0497デフォルトの名無しさんNGNG
ただ内部告発的なカキコも減ってしまう気もするんだが・・・
0498デフォルトの名無しさんNGNG
>>722
今のうちに親戚回りしておきな。
0499デフォルトの名無しさんNGNG
今回の件で言論の自由さえも脅かされることになるかも
誰も何も言えない時代が来そうな伊予柑
0500デフォルトの名無しさんNGNG
匿名掲示板の意味を履き違えてる人が多くて萎える。
0501デフォルトの名無しさんNGNG
では、お言葉に甘えまして。

削除系の板は今までも(恐らくリモホ表示以前から)
SETTING.TXTの設定でIPを記録していましたが、何か?
0502デフォルトの名無しさんNGNG
これはイヤですね
0503デフォルトの名無しさんNGNG
すいません、emacs-18.55.1使ってるんですけど、
encode-timeやらdecode-timeやらがありません。
この環境で、現在日付を求める関数とかって作れますか?
いや、標準で入ってるcalendarとかは、ちゃんと表示できてるわけで、
スキルさえあればできるんでしょうけど、
ソース見ても全然分かりませんでした。。
0504503NGNG
ああ、ちょっと18にも(current-time-string)っていう関数があるんですね。
これの部分文字列使えば日付とか使えそうです。…
0505デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0506デフォルトの名無しさんNGNG
やべえ。俺は消されちまう。
怖いのは警察ではないぞ。
0507デフォルトの名無しさんNGNG
何でここに貼るのか分からん
0508デフォルトの名無しさんNGNG
とりあえず、最速1,000祭りデモするか・・・・
0509デフォルトの名無しさんNGNG
lispでファイルテストってどうやってやるんでしょう?
perlとかだと「-e ファイル名」とかって調べられるんですけど。
そのファイルが既に存在しているかどうか、を調べたいんです。
0510デフォルトの名無しさんNGNG

>1 :ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ :03/01/08 17:13 ID:???
>そんなわけで、qbサーバでIPの記録実験をはじめましたー。

IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/l20

IP記録実験PART2
http://qb.2ch.net/test/read.cgi/accuse/1042020193/l20

これまでのあらすじは あたりに誰かお願い。
0511デフォルトの名無しさんNGNG
まさか、ポリタンが立てるとは…


                   ちょっと面白いので好。
0512デフォルトの名無しさんNGNG
>>509
file-exists-p ってえのがあるけど。
0513509NGNG
>>512
それだ。それでした。やってみたら大当たりッス。
サンクスコ。ありがとう。
0514デフォルトの名無しさんNGNG
sports3鯖死んでる??
国内サッカー板が見れない…
0515デフォルトの名無しさんNGNG
ていうか、ここでどーこー言ってる連中は、他を見たり書き込んだりせんのかw
0516デフォルトの名無しさんNGNG

さ〜よな〜ら、大好きな2ちゃん〜♪

 
0517デフォルトの名無しさんNGNG
いや、俺のIP記録してもいいけど字汚いから読めないかもよ。
0518デフォルトの名無しさんNGNG
今日なんにも知らない友達に
2ちゃんねるって知ってる?
とか聞かれた。絶対テレビの影響で人増えるな・・・
0519デフォルトの名無しさんNGNG
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。
0520ふわふわ名無しさんNGNG
>>509
Emacs Lisp なら file-exists-p 。
Common Lisp だったら probe-file だったかな。
0521デフォルトの名無しさんNGNG
岡田克彦ファンクラブからのご案内です。岡田克彦氏の卒業した早稲田大学
政治経済学部に比べて著しい低学歴、特に、ひろゆきの卒業した中央大学文学部
のようなヘボい大学に共通しているのは、文化水準が低いという事です。18歳から22歳を
ヘボい大学で過ごすということは、致命傷と言えます。2ちゃんねらーの大半は
岡田克彦氏に比べて、著しい低学歴ですから、取り返しはつかないのです。
せめて、http://www.geocities.co.jp/MusicHall-Horn/1091/で、氏の作品に触れましょう。
0522デフォルトの名無しさんNGNG
Internet Service Providerが契約者に対し
顧客情報の開示を行うことを明らかにするだけだ。
責任は書き込んだ奴が取るだけ。
0523デフォルトの名無しさんNGNG
最近カール★さん見ない・・・
0524山崎渉NGNG
(^^)
0525デフォルトの名無しさんNGNG
法律>>>>>>>>>>>>>超えられない壁>>>>>>>>>>>ローカルルール

日本にいるなら日本の法律を守りませう


0526デフォルトの名無しさんNGNG
なぁ、ちょっと確認したいんだが、ここはemacs-lispのスレだよな?
0527デフォルトの名無しさんNGNG
>>526
詳細は自治スレへ
0528デフォルトの名無しさんNGNG
>>526
はい。
0529デフォルトの名無しさんNGNG
「LISPの計算量評価はCONSの回数を問題とする」
って聞いたんだけど、何で?わからんのだけど。

これを読め!
っての知ってたら示してくれると嬉しいです。
教えてくんでスマソ
0530デフォルトの名無しさんNGNG
>>529
あのさ、「何で?」どころじゃなくて、
意味がつかめないんだけど。
質問の仕方ってのがあるだろ。
0531山崎渉NGNG
(^^)
0532山崎渉NGNG
(^^)
0533デフォルトの名無しさんNGNG
age
0534デフォルトの名無しさんNGNG
>>529 ものすごく今更だが、cons すると cons セルを消費するので cons 回数を
気にするんだYO!! だから cons セルを節約するために破壊的操作 nconc, nreverse
なんてのがあるんだYO!! しかし、優秀な gc (ACL とか)を持ってる処理系なら
破壊的操作なんてしないでバリバリ cons しまくるのが真の漢。
0535デフォルトの名無しさんNGNG
32ビット整数を扱うためのEmacs Lispパッケージってないですか?
(let ((now (current-time)))
(+ (ash (car now) 16) (car (cdr now))))
なんてのを書いてて、整数が28ビットなのに気がつきました。
とりあえず四則演算、大小比較と、文字列との相互変換ができれば
幸せなんですが。
0536デフォルトの名無しさんNGNG
>535
ちょっと調べて、bignum.elとか気の利いたパッケージがあると
思ったけど整数(28bit)と浮動小数点数しかないみたいね。
http://list-archive.xemacs.org/xemacs-beta/200105/msg00205.html
こういうモジュール組みこむしかないのかな。
0537デフォルトの名無しさんNGNG
今さらながら cl のマクロ使ってみた。
flet とか dolist とか、すごいね。便利。
他に dotimes、lexical-let、case、push、pop
ぐらいしかみてないんだけど、おすすめマクロ
とかあったら、おせーて下さい。
0538535NGNG
>>536
サンクスコ。
ttp://list-archive.xemacs.org/xemacs-beta/200105/msg00205.html
漏れはちゃんと理解できないけど、何やら難しそうですね。
とりあえずこんななんちゃってコードでごまかしました。
つまり整数でなく常に浮動小数点数を使うということで。

(defun my-number-to-string (n)
(let ((str (number-to-string n)))
(cond
((string-match "\\.[0-9]+" str)
(substring str 0 (match-beginning 0)))
(t
str))))
(defun my-string-to-number (str)
(string-to-number (concat str ".0")))
...
(let (now (current-time))
(+ (* 1.0 (expt 2 16) (car now)) (car (cdr now))))
0539デフォルトの名無しさんNGNG
>>537
multiple-value-bind や destructuring-bind はどうでしょうか?

(multiple-value-bind (a b) (values 1 2)
 (list a b))
==> (1 2)

(destructuring-bind (a b) '(1 2)
 (list a b))
==> (1 2)
0540デフォルトの名無しさんNGNG
((1 2 3) (4 5 6))

このような整数のリストのリストに 1+ を map して

((2 3 4) (5 6 7))

を得るにはどう書きます?

0541デフォルトの名無しさんNGNG
>>540
こう?

(setq list '((1 2 3) (4 5 6)))
(mapcar (lambda (x)
(mapcar '1+ x))
list)
0542デフォルトの名無しさんNGNG
(defun hoge (f x)
(if (listp x) (mapcar (lambda (x) (hoge f x)) x)
(funcall f x)))
こんな関数なかったかな?

(hoge '1+ '((1 2 3) (4 5 6)))
((2 3 4) (5 6 7))
0543デフォルトの名無しさんNGNG
(defun hoge (l)
(let (x)
(cond
((null l)
nil)
(t
(setq x (car l))
(cond
((integerp x)
(setq x (1+ x))
(cons x (hoge (cdr l))))
((listp x)
(cons (hoge x) (hoge (cdr l)))))))))
0544デフォルトの名無しさんNGNG
emacs-lisp-mode, lisp-mode, scheme-mode などで、
括弧の色を変えるにはどうしたらいいでしょう?
ちょいと薄めの色にしたい。
0545デフォルトの名無しさんNGNG
customize
0546デフォルトの名無しさんNGNG
(defun hoge (l)
(cond ((null l) nil)
((integerp l) (1+ l))
((listp l) (cons (hoge (car l)) (hoge (cdr l))))))
0547デフォルトの名無しさんNGNG
>>544
http://namazu.org/~satoru/programming/permstr.html#pale-parens
0548デフォルトの名無しさんNGNG
547 ソレイイ アリガトウ
0549名無しさん@XEmacsNGNG
XEmacs 21.4 (patch 12) "Portable Code" [Lucid] (i386-debian-linux, Mule) of Mon Jan 27 2003 on eeyore
なんだけど、edebugがうごかん。

っていうか、M-x edebug-defun で、関数をinstrumenting
したのに、その関数が呼ばれたときになにもおこらん。

0550デフォルトの名無しさんNGNG
【何処も】情報科学総合スッドレ【板違い】
http://science.2ch.net/test/read.cgi/rikei/1046173479/l50



*:□
0551デフォルトの名無しさんNGNG
↓これと同じことをする関数って何でしたっけ?
(buffer-substring-no-properties
(save-excursion (beginning-of-line) (point)) (point))
0552デフォルトの名無しさんNGNG
(´-`).。oO( >>551 は point-at-bol のことを言っているのだろうか?)
0553551NGNG
>>552
どうもありがとうございます。
本当はカレント行の文字列をゲットするつもりで書いたのですが、
書き間違ってました...。
(buffer-substring-no-properties (point-at-bol) (point-at-eol))
で実現できますけど、他にありませんでしたっけ?
0554デフォルトの名無しさんNGNG
>>553
それでいいんでないの?
Emacs20 だと point-at-bol, -eol がないから
>>551 みたいにしなくちゃいかんが。
0555551NGNG
>>554
そうだったんですか。勉強になります。
0556デフォルトの名無しさんNGNG
>>554
line-{beginning,end}-position
0557デフォルトの名無しさんNGNG
一般的に mapcar()と while()はどちらが高速ですか?
0558デフォルトの名無しさんNGNG
while
0559デフォルトの名無しさんNGNG
mapcar
0560デフォルトの名無しさんNGNG
which
0561デフォルトの名無しさんNGNG
mapc
0562デフォルトの名無しさんNGNG
who
0563デフォルトの名無しさんNGNG
why?
0564デフォルトの名無しさんNGNG
whoops!
0565デフォルトの名無しさんNGNG
(w
0566デフォルトの名無しさんNGNG
おまえら、イイ加減にしる。
0567名無しさん@EmacsNGNG
うん、イイ加減だな。
0568デフォルトの名無しさんNGNG
mapcarはリスト作るから遅いんじゃないの
0569デフォルトの名無しさんNGNG
schemeでいうfor-eachが欲しいな。
0570デフォルトの名無しさんNGNG
mapc は emacs21 では built-in になったけど、
emacs20 や xemacs では cl だから、今のところ特にメリット無いな。

>>503
18.55 だなんて、かなりレアそうだな。
比較的メジャー(?)な nemacs でも 18.59 だから。
0571デフォルトの名無しさんNGNG
とりあえず末尾再帰をなんとかしてくれ
0572デフォルトの名無しさんNGNG
ほんと、末尾再帰最適化してくれると、いろいろ書きやすくなりそうなんだけど…
byte-opt.el あたりには、 dynamic binding だと苦しい、って書いてあるね…
(lexical-scope) とかの form を導入する idea も書いてあるけど、実現されてないみたいだし…
0573デフォルトの名無しさんNGNG
dynamic bindingだと、末尾再帰の展開って難しいの?
bytecode.cのソース読んでみたけど、よくわからなかった
0574デフォルトの名無しさんNGNG
正確には「末尾呼び出し」だから dynamic bind だろうが関係無いと思うんだが
0575デフォルトの名無しさんNGNG
tail-call の時に dynamic binding stack が成長し続けちゃうのね。
0576デフォルトの名無しさんNGNG
なるほど、そういうことか
elisp イラネ
0577デフォルトの名無しさんNGNG
tail-call のときって、 symbol の中身はもう参照されないってことは保証できそうな気がする。
そういう symbol に印つけて、印があったら stack に積まずに破壊的に代入する…とかってできるのかな。
…そういう処理してたら、普通の関数は今より遅くなるだろうけど。

やっぱり、 lexical scoping の宣言とか使って最適化できるほうがいいんだろうな…
0578デフォルトの名無しさんNGNG
> tail-call のときって、 symbol の中身はもう参照されないってことは保証できそうな気がする。

自分自身への tail-call のように、単純な形の場合にしか保証できないような気がします。
メリットをデメリットがうわまわりそうです。

やっぱり lexical scoping で multi thread な emacs 希望。
0579デフォルトの名無しさんNGNG
(let ((foo 'outer)) outer-process ...
(let ((foo 'inner)) inner-process ...))
みたいに、最後に束縛するときって、 foo を 'outer に戻せなくてもいいよね。
一般化すると…束縛作る form の末尾の部分で、更に束縛作るとき、って感じだと思う。
outer の末尾で inner が束縛作るとき、 outer が作った束縛を、 inner が作ったように引き継いで…
重複する部分は inner のほうで上書きするようにすると、相互再帰くらいならできそうな気がする。
…やっぱり demerit 大きいかな…

あ、私も multi-thread ほしい…
でも、 dynamic binding と multi-thread って相性悪そうだから、 lexical ができてからかな…
それとも、 obarray 差し換えとかで対応できるかな。
0580デフォルトの名無しさんNGNG
末尾呼び出しだと、戻る必要が無いんだから dynamic binding を
その時点での stack に上乗せするのではなく、
その時点での stack を全部一つの環境に押し込んで一つにして、
その後は、その上に積んでけばよいのでわ?
0581デフォルトの名無しさんNGNG
いまいち問題が理解できないや。

(define (ack m n)
 (cond ((zero? m) (+ n 1))
  ((zero? n) (ack (- m 1) 1)) ;※a
  (else (ack (- m 1) (ack m (- n 1)))))) ;※b

schemeでは、aとbの最後のackは末尾再帰になるんだけど、
これがdynamic-bindだと、どういう問題が出るの?
0582デフォルトの名無しさんNGNG
>581
その場合は関係無い
0583デフォルトの名無しさんNGNG
(let ((a b)) (f))でfのなかでaを評価する時が問題になるんだよね?
0584デフォルトの名無しさんNGNG
最近 Emacs Lisp を使い始めた者ですが、

(defun foo (func)
 (funcall func))

(defun bar (func)
 (foo #'(lambda () (print "bar") (funcall func))))

(defun test ()
 (bar #'(lambda () (print "test"))))

> (test)
"bar"
"bar"
"bar"
:

上記のような関数が foo 内で無限ループして、
"Lisp nesting exceeds max-lisp-eval-depth"
というエラーになってしまいます。
foo の仮引数 func と bar の仮引数 func を別の名前に
変更すれば期待通りに動作します。
しかし、foo がライブラリ関数で、bar がユーザの関数で
あるような場合、ユーザがたまたま func という変数を使っ
てしまうと無限ループしてしまいます。
ライブラリ関数として高階関数を使う場面は多いと思うの
ですが、このような状況をどのように回避したらよいので
しょうか?
ちなみに Common Lisp では上記のような現象は起こりません。
0585デフォルトの名無しさんNGNG
>584
それこそ dynamic binding の長所であり短所
0586584NGNG
Common Lisp も Emacs Lisp も dynamic binding ですよね?
でも、 >>584 のコードを Common Lisp (ACL) で実行すると期待通り
に動作します。Emacs Lisp と Common Lisp の無名関数(lambda)内の
binding の仕方が違うということでしょうか。

となると Emacs Lisp では高階関数をまともに使えないような気が
しますが、そういうもんなのでしょうか?
0587デフォルトの名無しさんNGNG
>>586
Common Lisp は lexical scoping だったと思うけどな。
elisp には Common Lisp っぽいことのための cl っていう package があって…
その中に lexical-let っていう、そんなときのための macro があるし。

無名関数に限らず、関数内での symbol の bind のされかたが違うの。
だから、外部から参照する symbol は、名前が被らないように気をつけなきゃいけない。
my-bar-func みたいに、 package 名で prefix したり、少し説明的な名前にしたり。
それが >>585 も云ってる、 dynamic binding の短所。
0588デフォルトの名無しさんNGNG
>>581-583
問題になってるのは、 let とかで bind してる場合、でいいんだよね。

(defun foo (x)
(let ((bar (cons x bar)))
(if (> x 0) (foo (- x 1))
bar)))))

(defvar bar nil)

みたいなとき、 foo が呼ばれるたびに bar が stack に積まれてっちゃう、っていう。
0589デフォルトの名無しさんNGNG
>>588
え、マジで?
barはletで書き換わるけど、それはlet有効範囲内での話で、
fooから戻ったらdefvarのbarはnilのままじゃないの?

(foo 3) ;としたら、
=>(3 2 1 0) が返るけど、
bar
=>nil
でしょ?

>>584
をelispの規則でtestを基点にインライン展開したら、
どうなるんだろう。
#'(lambda〜の中のfuncはシンボル参照として
そのまま残ったりするのかな。

scheme流に展開すると、破壊操作でもない限り全部展開できる。
(define (test)
 ((lambda() (print "bar") ((lambda()(print "test")]
つまり
(define (test) (print "bar")(print "test"))
0590デフォルトの名無しさんNGNG
>>589
それがdynamic(ry
ここで色々書くより
http://www.gnu.org/manual/elisp-manual-21-2.8/html_node/elisp_147.html
理解できるまでこのセクションを何度でも読み直すのがはやいと思われ。
0591デフォルトの名無しさんNGNG
>>590
どもです。
ちょっと勉強してきます。
0592デフォルトの名無しさんNGNG
>>589
あ…ごめん、もちろん let 有効範囲内。再帰してる間の話。
>>588 の関数で再帰してくと、 call stack の他に binding stack もあふれる、っていう例。

# …でも (foo 3) は (3 2 1 0) じゃなくて (0 1 2 3) 、と重箱の隅をつついてみる。
0593584NGNG
>>590
ありがとうございました。
「Emacs Lisp does not have closures.」
ということで理解できました。

dynamic binding だとしても、foo の束縛(func)が bar の束縛(func)を shadow
してくれるのでは? と考えていたのですが、無名関数(lambda)はただの cons で
(つまり変数束縛をもたない)、funcall で実行されるときの束縛が利用されるということですね。

> (consp #'(lambda () (print "bar") (funcall func)))
t
0594デフォルトの名無しさんNGNG
>>569
(defun for-each-rec (func &rest lists)
 (cond ((null (car lists)) nil)
    (t (apply #'funcall func (mapcar #'car lists))
      (apply #'for-each-rec func (mapcar #'cdr lists)))))

(defun for-each-do (func &rest lists)
 (do ((lists lists (mapcar #'cdr lists)))
   ((null (car lists)) nil)
  (apply #'funcall func (mapcar #'car lists))))

> (for-each-do #'(lambda (x y) (print (cons x y))) '(1 2 3) '(4 5 6))
(1 . 4)
(2 . 5)
(3 . 6)
nil
0595デフォルトの名無しさんNGNG
(defun for-each-while (func &rest lists)
(while (car lists)
(apply func (mapcar 'car lists))
(setq lists (mapcar 'cdr lists))))

(for-each-while (lambda (x y) (print (cons x y))) '(1 2 3) '(4 5 6))
-| (1 . 4)
-| (2 . 5)
-| (3 . 6)
=> nil
0596デフォルトの名無しさんNGNG
もう一回 stack ネタに戻ってみていいかな…うざかったらごめん。

>>588 の foo を例にすると、 let の中で tail-call してて、呼ばれた foo も let で終わってる。
内側の let の中では、この二つの let が作る binding は、一つにまとめちゃっていいよね。 (>>579)
それで、一つにまとめると同じ symbol は隠れちゃうから、上書きしちゃっていい。
そういう最適化ができれば、たぶん少し複雑な再帰でも、 binding stack 成長させずにできそうな気がするけど…どうだろ。

関数末尾の let とかを特別視して、 tail-call のときにそういう binding をまとめられる binding として記憶しとくことと、
末尾の binding 作るときにまとめられる binding があるかどうか確認して、あればまとめることが必要になるけど。
0597デフォルトの名無しさんNGNG
>>596
関数も動的スコープなので
(defun bar ()
(defun foo () 'x))

(defun foo ()
(bar)
(foo))

(foo)
x
となるです。つまり、呼び出す関数セルに何が入ってるかは実行時まで
わからないので、束縛をまとめるのは難しいんじゃないかと。
0598デフォルトの名無しさんNGNG
>>597
それは top level environment であって、関数の動的スコープとは関係ないのでは。
0599デフォルトの名無しさんNGNG
>597
・ Top Level からの呼び出しは常に末尾ではない
・ 束縛をまとめるのが可能なのは末尾呼び出しの場合のみ
0600デフォルトの名無しさんNGNG
>>597
確かに compiler だけで実行前に最適化するのは難しいと思う。
interpreter に直接 stack 書き換えてもらう、って感じで考えてた。

compile の時点だと、末尾で呼び出しや束縛があることまではわかるよね。
compile した関数だけ最適化されればいいなら、これに専用の byte-opcode とか割り当てればいいのかも。
普通の束縛や呼び出しの代わりにそっちを使ったときだけ、 interpreter が stack 書き換えてくれるの。
これだと、それ以外の関数の実行への悪影響は、そんなに大きくならないかも。
0601デフォルトの名無しさんNGNG
replにコンパイラ仕込むとか
0602デフォルトの名無しさんNGNG
↓こういう関数ってデフォルトでありますか?
(??? "\"aaa\\\\bbb\\\\ccc\"")
=> "aaa\\bbb\\ccc"
0603デフォルトの名無しさんNGNG
(read "\"aaa\\\\bbb\\\\ccc\"")
=> "aaa\\bbb\\ccc"
0604602NGNG
>>603
サンクス!
0605デフォルトの名無しさんNGNG
emacs-lispにhere documentて無いですか?
#<<EOH

emacs-lispにhere documentて無いですか?

EOH
=>"\nemacs-lispにhere documentて無いですか?\n\n"
0606山崎渉NGNG
(^^)
0607山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0608デフォルトの名無しさんNGNG
ホシュ
0609デフォルトの名無しさんNGNG
バッファ編集後にアクティブマークを再設定するにはどうしたらいいんでしょう?
(transient-mark-mode t)の状態で、バッファを編集(リージョン各行頭に文字挿入など)し、繰り返し編集できるようにアクティブマークを再設定したいんですが、どうやっても色付き部分が消えてしまいます。
pc-select.elを参考にしてみたんですが、あれは編集が発生しないのでマークが消えないようなのです。
0610デフォルトの名無しさんNGNG
>>609 C-x C-x
0611名無しさん@お腹いっぱい。NGNG
ほうらわかりづらい日本語を使うとはずした答えが出てくるだろ
0612デフォルトの名無しさんNGNG
たぶんここよりUNIX板のemacsスレで聞いた方が的確な答えが貰えると思う。
じゃあこのスレはなんなのかというと・・・
0613名無しさん@お腹いっぱい。NGNG
ミニバッファで find-file してる時に C-w で直前のディレクトリを削除する
次のような関数を作りました。

(defun backward-delete-path ()
(interactive)
(backward-delete-char 1)
(while (not (eq (preceding-char) ?/))
(backward-delete-char 1)))

(define-key minibuffer-local-completion-map "\C-w" 'backward-delete-path)
(define-key minibuffer-local-map "\C-w" 'backward-delete-path)
(define-key minibuffer-local-must-match-map "\C-w" 'backward-delete-path)

で、C-w を連打すると Text is read-only と怒られてしまいます。
C-a した時に止まる場所になったらそれ以上は文字削除しないようにしたいのですが
どの部分でどのようにチェックをかけたら良いでしょうか?
0614デフォルトの名無しさんNGNG
(゚Д゚)bolp
0615613NGNG
614さん、どうもです。

Find file: ~/elisp
とした場合、C-a は ~ の位置で止まるのですが
ここでは (bolp) は nil とされてしまい、
F の位置でのみ t と判断されるようです…。
0616デフォルトの名無しさんNGNG
614はまちがい。
1字ずつ消すんでなくて、スラッシュを検索して一気に消す方がよさそうな気も。
0617613NGNG
うーん。どのように書けばいいか…。
へたれですいません。
0618名無しさん@お腹いっぱい。NGNG
>>609
別解だが、narrow-to-region して編集するのが Emacs のお作法
>>617
backward-kill-word でも使っとけ
0619デフォルトの名無しさんNGNG
>>618
うーん、せっかくヒントを貰っているようなんですが解りません。
narrow-to-regionで隠せばバッファを編集しても
deactivate-markを免れるのかと思いきやうまくいかず。
0620デフォルトの名無しさんNGNG
コマンドを実行した後にmark-activeがnilになるのは、emacs本体に
コーディングされているからね。まあ、無理矢理やってやれないことはないけど。

(setq keep-mark-active nil)
(setq deactivate-mark-hook nil)
(add-hook 'deactivate-mark-hook
(lambda () (when keep-mark-active
(setq mark-active t
keep-mark-active nil))))
(local-set-key "\C-c\C-a"
(lambda(beg end)
(interactive "r")
(save-excursion
(goto-char beg)
(while (< (point) end)
(beginning-of-line)
(insert "> ")
(next-line 1)))
(setq keep-mark-active (and transient-mark-mode mark-active))))

C-uみたいな、続いて指定されたコマンドの後にmark-activeを復活するような
コマンドを作ると少しはおもしろいかも。

ちなみにリージョン行頭に文字挿入ならC-x r tな。

>>618がいってるのは、範囲指定の編集はnarrowするのがemacsの伝統で、
これはwidenするまでそのままだからなんのコマンドでも好きなだけ同じ
範囲に適用できるってことだと思う。

ところでnarrow-regionしている間mode lineに何か表示するelispってどこかに
ないですか。
0621デフォルトの名無しさんNGNG
>>617
こんな感じ、ってことじゃないかな。

(defun backward-delete-path ()
(interactive)
(save-match-data
(let ((pos (point)))
(if (search-backward-regexp "/." (line-beginning-position) t)
(delete-region (match-beginning 0) pos)
(delete-region (line-beginning-position) pos)))))
0622613NGNG
621さん、ありがとうございます!
最後の行を以下のようにして期待通りの動きになりました。

(delete-region (line-beginning-position) pos))
(insert "/"))))
0623Lisp 1.5NGNG
>>600
言語仕様をレキシカルスコープにすればそんなことはやらなくてすむ。ただし、
buffer localな変数がないのはきついので、"環境"について拡張が必要になる。

current stack frame内slot(lexical scoped)→buffer local環境→top level環境

guile-emacsはどうなっているのだろう…

0624名無しさん@お腹いっぱい。NGNG
>>620
> ところでnarrow-regionしている間mode lineに何か表示するelispってどこかに
> ないですか。
%n じゃ不満?
0625620NGNG
>>624
%n が何のことかよくわからないです。
……とmode-line-formatを見ると、ああ、なるほど。了解しました。
ありがとうございます。好みに合うよういじってみます。
0626デフォルトの名無しさんNGNG
>>623
全部 lexical にすると、かなり非互換な package が出そう…
global variable を default argument みたいに使って、適宣 let するっていう使いかた、手軽でいいし…
そういうののために fluid-let とか用意すると、そっちで同じ問題が出るだろうし。

環境のほうは、もうちょっと好きにいじれたら…って思う。
buffer 以外にも、いろんな状態に応じた local の環境作れたりすると楽しそう…
0627デフォルトの名無しさんNGNG
>>620
うおお、感謝です。
ばっちりいけました。
0628山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0629デフォルトの名無しさんNGNG
とりあえず末尾再帰をなんとかしてくれ
0630デフォルトの名無しさんNGNG
保守sage
0631デフォルトの名無しさんNGNG
まぁ、ぼちぼちって感じ?
0632名無しさん@EmacsNGNG
Cygwin&XEmacs
0633デフォルトの名無しさんNGNG
shell-command() の後に、何か処理をしてから終了する関数があるとします。
(defun hogehoge ()
(let ((command))
(setq command (read-from-minibuffer "% "))
(shell-command command)
;; 後処理
))
ミニバッファにいる時に C-g した時は shell-command() を実行しないで
後処理だけやらせたいのですが、どのようにすればよいのでしょうか?
0634名無しさん@お腹いっぱい。NGNG
>>633
condition-case
0635633NGNG
>>634
どうもありがとうございます。
いまいちスマートじゃありませんが、とりあえず出来ました。
(defun hogehoge ()
(let ((after-proc (lambda (arg) arg)))
(condition-case nil
(progn
(shell-command (read-string "% "))
(funcall after-proc t))
(quit
(funcall after-proc nil)))))
0636633NGNG
たびたびすみません。
8進数 600 か 文字列 "600" を 10進数 384 にすることは可能でしょうか?
GNU-Emacs21.3 だと (read (concat "?\\" "600")) で一応出来ましたが、
XEmacs21.4.9 だと ↑これやると落ちてしまいます。
0637デフォルトの名無しさんNGNG
愚直な例
(defun oct2dec (oct)
(when (numberp oct)
(setq oct (int-to-string oct)))
(let ((cl (mapcar 'char-to-string (string-to-char-list oct)))
(dec 0))
(while cl
(setq dec (+ dec (string-to-int (car cl)))
cl (cdr cl))
(when cl
(setq dec (* 8 dec))))
dec))
0638デフォルトの名無しさんNGNG
>>636
string-to-number() で第2引き数を指定。
0639デフォルトの名無しさんNGNG
>>637,638
どうもありがとうございました。
0640デフォルトの名無しさんNGNG

たまに見かける、

'(info-xref ((t (:foreground "DarkGreen"))))

とかの
(:hogehoge value :hagehage val)

っていったいなんですか?

おしえてけろ。
0641デフォルトの名無しさんNGNG
キーワード引数
0642名無しさん@MeadowNGNG
>>100
でも、「変態配置」を覚えとかないと、結局どこかで不便になる予感。
半日コーディングしてたら慣れたよ。慣れると便利だしね。
0643デフォルトの名無しさんNGNG
カーソルキーにkeyboard-translateを掛けるにはどうしたら良いんでしょう?
というか、キーコード番号ってどうやったら調べられるんですか?
Sigmarion3でEmacsCEを使ってるんですが、「/」の位置に[up]があるので
SKKユーザのおれには激しく辛いのです。
0644デフォルトの名無しさんNGNG
例えば、正規表現 "^[0-2]$" に当てはまる文字列は
"0" "1" "2" ですが、この展開をしてくれる関数ってありますか?
0645Lisp 1.5NGNG
EmacsCEでは、
(keyboard-translate 'up ?/)
が効きますかね?

0646デフォルトの名無しさんNGNG
>>644
"a*" とかは何を返せばよろしいの?
"" "a" "aa" ...
こんなの?
0647デフォルトの名無しさんNGNG
>>646
はい。無限個の文字列の集合を得たいのです。
0648デフォルトの名無しさんNGNG
>>647
無限個の文字列を得るためには無限のリソースが必要
無限個の文字列を表現するには無限のリソースは必要ない
0649デフォルトの名無しさんNGNG
>>647は別人の釣りに決まってるでしょ

ちなみに遅延ストリームを使えば無限の文字列を有限のリソースで扱える。
ダイナミックスコープでは制約もありそうだけど。
0650644NGNG
>>647
なんか違う人が答えてる...。
そう思って "^" と "$" で括ったのですが、無理がありましたかね。
基本的に、展開したい正規表現は "^\\(hoge\\|huga\\)hoehoe$"
といった書式だと決まっているので、自分で作ればいいのかな...。
無限の文字列になる場合は、エラーを返すようにするとか。
0651643NGNG
>>645
EmacsCEでも動きませんし、Emacs 20や21でも動きませんでした。
「'up」が整数と評価できないようですね。
0652デフォルトの名無しさんNGNG
>>649
遅延ストリームは無限個の表現であって無限個そのものではない
0653Lisp 1.5NGNG
>>651
ああ、Emacsって未だに文字は整数だったね。
keyboard-translateでも整数しか扱えないや。

じゃあ無理だよ。ちまちまdefine-keyしていくしかない。
XEmacsCEつーのも、xmodmapもないだろうし:-)
0654山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0655643NGNG
>>653
できました。
(vector 'up)ができるじゃないですか。
どっかに無変換キーの割り当て方法があったはず…とか思ったらSKKのInfoでした。
0656山崎 渉NGNG
(^^)
0657デフォルトの名無しさんNGNG
sql-modeで500行しか表示されない(前の方が
消えていく)のですが、これはどこで設定できる
でしょうか?
0658657NGNG
すれ違いスマソ。
0659デフォルトの名無しさんNGNG
文字列の置換に関してなんですけど。

perform-replace て置換の対象がバッファなんですが、変数に対して置換する
ようなのはあります?

テンポラリなバッファ作って置換後に変数にコピー・・・てやらんとダメなん
でしょうか?
0660デフォルトの名無しさんNGNG
>>659
replace-regexp-in-string (emacs21)
replace-in-string (xemacs)
って事?
0661デフォルトの名無しさんNGNG
>>660
ををを!ありがとうございます。

meadow2なのに GNU Emacs 20.3版のElisp リファレンスを見てました。
やっぱし apropos すべきでした。すんません。
0662デフォルトの名無しさんNGNG
すみません。質問させてください。
emacsを一生使い続けるつもりで、elispを覚えたいのですが、
良質サイト、良書、などありましたらお願いします。
又、Lisp, CommonLisp, Emacs Lisp の違いというのは何でしょうか?
0663デフォルトの名無しさんNGNG
emacs lisp と Common Lisp を比較すると漏れが気になる部分はくらいかな.
リーダーマクロがないとかそーゆうのはおいといて.

* Common Lisp に劣るところ
- ダイナミックスコープである(クロージャが…)
- 多倍長整数がない,有理数もサポート外
- CLOS のような標準の Object 指向システムがない
- 末尾再帰の最適化ができないため,再帰より反復を使うことになる場合がある.

* いいところ
- emacs が唯一の処理系(Common Lisp は GCL,ECL,CLISP,CMUCL,Allegro,LispWorks と乱立気味)
↑ xemacs とか meadow といった亜種もあるけど
- エディタと一体なので編集系関数が充実
- 文字列処理(正規表現とか)は Common Lisp に比べてめっちゃ強力
- 便利なデバッガがついてくる(M-x edebug-defun とか)
0664デフォルトの名無しさんNGNG
ダイナミックスコープなのは、エディタ環境として見ればメリットも多いのでは?
0665デフォルトの名無しさんNGNG
>>664
動的スコープの利便性を活かす場面は、そう頻繁には現れない。
なにより最適化が難しい。
バイトコードコンパイラが末尾再帰の展開をしない原因でもある。
独自LISPは変わらずとも、バインディング規則の変換ツールを作って、
本体はさっさと静的スコープに移行しちゃった方がいいと思う。
EmacsLispのメンテナ自身が、もう動的スコープは嫌だとゲロってます。

それと、まともな整数型は欲しいね。関連してFFIが無いのも痛い。
いまだにWindowsのDLLやUNIX系のsoの様な外部モジュール関数が使えない。
タグに8bitも使ってるんだから、新しい型を定義するのは困難でも無い気がする。
RMSは何を考えているのか。どういうわけかFFIを嫌ってるらしいけど。
0666デフォルトの名無しさんNGNG
>>665
静的だと、最適化しやすいぶん、いじりにくくなると思う。

関数は hook と advice があればなんとかできるかもしれないけど…
静的な hook や advice ってどんな感じなんだろ…

変数は、 fill-column みたいな defvar されてるのを一時的に差し換える手段がなくなっちゃうと思う。
参照する関数全部が optional の引数を取って、そっちを優先するようにすればいいけど…
参照したい変数が増えると、定義がすごいことになるだろうし…


いっそ、 FFI 導入して、 guile も標準でつけちゃうとか…
0667デフォルトの名無しさんNGNG
FFIを実装するパッチを公開→うまい使い方を提示→世間に広め既成事実化→RMS折れる
とはならんか?
0668デフォルトの名無しさんNGNG
↑ muleみたいに
0669デフォルトの名無しさんNGNG
>>666
Common Lisp みたいにスペシャル変数にして (let ((*fill-colum* 80)) ...) でいいじゃないか.
個人的には CommonLisp キボンヌなんだが,rms は CommonLisp が好きじゃないらしいからなぁ…
0670山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0671デフォルトの名無しさんNGNG
動的スコープはfluid-letで代用できるんじゃないの?
0672デフォルトの名無しさんNGNG
ageておこう
0673デフォルトの名無しさんNGNG
うむ。ageておこう。
0674デフォルトの名無しさんNGNG
Common Lisp はよく知らないけど…
動的な束縛が共存できるなら、そんなに困らないかも。
基本的に静的で、 defvar したのは動的とか。
0675デフォルトの名無しさんNGNG
>>671

fluid-let はグローバル変数だけで↓とかできないよね?

(defun foo ()
(let ((x 1) (y 2))
(bar)))

(defun bar ()
(+ x y))

(foo)
3

あとグローバルと fluid-let の間のスコープに同名の変数があるとそっち見ない?
これは組んだ奴が悪いのか…
0676CL 派NGNG
Common Lisp はできるぞぅ.

(defun f ()
(let ((msg "fubar you lose again!!"))
(declare (special msg)) ;; これないとエラー
(g)))

(defun g () (print msg))
0677デフォルトの名無しさんNGNG
hook を利用してゴニョゴニョってな事が
しづらくなるケースもあるかも?
■ このスレッドは過去ログ倉庫に格納されています