5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Emacs Lisp

1 :デフォルトの名無しさん:01/11/01 02:57
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/

2 :1:01/11/01 02:58
;; 無用なスレになったらすいません。

3 :デフォルトの名無しさん:01/11/01 05:22
先生!なぜEmacsはメジャーなCとかではなくてマイナーなLispを採用したのですか?
その利点は何?

4 :デフォルトの名無しさん:01/11/01 08:03
すくなくとも、Cを使わなかったのは正解だったと思われ。

5 :デフォルトの名無しさん:01/11/01 10:06
>>3-4
いやCは使ってると思うが…

Emacs Lispがなくて、かわりにカスタマイズや拡張をCだけでやるしかないとし
たら、あんなに気軽に拡張はできなかったね。.emacs書き換えるたびにビルド
し直すんだろ?(w

6 :デフォルトの名無しさん:01/11/01 10:12
別にCだとコンパイルしなおさなきゃいけないってわけでもない

7 :デフォルトの名無しさん:01/11/01 10:25
>>3
> 先生!なぜEmacsはメジャーなCとかではなくてマイナーなLispを採用したのですか?
> その利点は何?

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

それにカスタマイズ用に俺自作謎言語なマクロを実装しているエディタだって
沢山あるのに…。(エディタに限らないが)

8 :デフォルトの名無しさん:01/11/01 10:38
>>3
柔軟だから。C よりはるかに柔軟だから。

9 :デフォルトの名無しさん:01/11/01 10:39
>>7
実際はともかく、C メジャー、Lisp マイナーというのが普通(?)の多くの人の考える
ところのような気がするのですが。

10 :デフォルトの名無しさん:01/11/01 10:39
>>1
http://pc.2ch.net/test/read.cgi/unix/1001087615/l50
こっちじゃダメなのか?

11 :デフォルトの名無しさん:01/11/01 11:01
>>9
elisp ライブラリの数の多さを見れば十分メジャーだよ。
C に比較すれば少ないという点は否定しないけどね。

12 :デフォルトの名無しさん:01/11/01 11:51
>>6
どうすんのさ。Cインタプリタでも書く?
それならLispにした方が2^24倍かしこいだろ。

13 :デフォルトの名無しさん:01/11/01 12:03
カスタマイズ用のマクロ言語としては、
Cなんてほとんど使われてないと思うけど…
(あるのか?)

14 :デフォルトの名無しさん:01/11/01 12:24
>>13
>>3 は秀丸とかWZとかのC風マクロ言語を意識してるんじゃない?

15 :デフォルトの名無しさん:01/11/01 14:34
>>14
うん、そうかも。それってどマイナーだよね。

16 :デフォルトの名無しさん:01/11/02 11:38
今日は振替休日なので、マターリとelispのお勉強〜
defun と message と ifが使えるようになったにょ〜。

17 :デフォルトの名無しさん:01/11/02 13:14
いきなり煽り合いからのスレスタートか・・・
先が思いやられるな

18 :デフォルトの名無しさん:01/11/02 14:23
elisp は再帰をできるだけ使うなというのがなえるな.
elisp が「本物」の lisp や scheme だったらもう文句なしなのに.

19 :デフォルトの名無しさん:01/11/02 15:17
>>18
「本物」の lisp であっても再帰には制限あると思うけど。
Schemeはともかく。

20 :デフォルトの名無しさん:01/11/02 15:22
elispってschemeより古いんだっけ?

21 :デフォルトの名無しさん:01/11/02 16:06
>>20
GNU Emacs自体はScheme(1975年)ほど古くはないけど、
elispの仕様はMacLispとかの古いLispに非常に近いね。
特に、dynamic scopeしかないところが。

22 :デフォルトの名無しさん:01/11/02 20:51
>>12
> それならLispにした方が2^24倍かしこいだろ。

やはり残りの8bitはタグですか?

23 :デフォルトの名無しさん:01/11/03 01:42
結局 emacs lisp 固有の質問というのは Unix 板の emacs スレと
ずいぶん重なるんでじゃないですか?

24 :デフォルトの名無しさん:01/11/03 03:18
>>22 0倍になっちゃうじゃないか!!

25 :1:01/11/03 03:52
>>10,23
やはりそうなるんでしょうか。
この板に来るんだけれども、UNIX 板などには来ない人からのレスを期待して
しまっていました。lisp 人口が少しでも増えないかなとか思いつつ。
lisp か C かはアレとして、>>16のような人が増えると、みんなが幸せに
なれますね。

26 :デフォルトの名無しさん:01/11/03 04:07
つーかマニュアルで解決しちゃうんじゃないかな。
ちょっとした小物が多いだろうし。

27 :デフォルトの名無しさん:01/11/03 04:29
>>22
Elispが上位8ビットをタグに使っていたことを知っている人が
いるとは思わなかった。今は5ビットだけどね。

28 :デフォルトの名無しさん:01/11/03 04:57
>>1
UNIX板はEmacsスレは結構盛んです。一ヶ月半の間に500近い書き込み。
自分もよく教えてもらってます。

29 :名無しさん@Emacs:01/11/03 12:50
最近はemacs21の話ばっかりで盛れはカヤの外。
厨房っぽい質問してもシカトされるので、こういうスレは助かります。

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

OSを問わずほぼ同じ環境を整えられるというのは、
計り知れないメリットだと思います。
一生かけて使い込んでみようかなという気になります。

30 :デフォルトの名無しさん:01/11/03 13:21
elisp に lexical scope が欲しいと思うのは、
どのような時なんでしょうか?
dynamic scope だけでも特に困ったこと無いんですが...

31 :デフォルトの名無しさん:01/11/03 15:43
>27 反応があってなんか嬉しい。
タグ5bitってLSBに持ってるんですよね? で、セルは32bitアラインで配置かな。
俺が見たLispは68010用。よってMSB8bitがタグ。これ最強。
今はこういう貧乏臭い実装って嫌われるから鬱。

32 :デフォルトの名無しさん:01/11/03 17:34
lexical scope がないと、closure が作れないのでは。

33 :デフォルトの名無しさん:01/11/03 17:46
動的スコープってわかんないんだけど、
仮引数に対しては静的だよね?

34 :デフォルトの名無しさん:01/11/03 17:58
LispってMacから発祥なんすか?

35 :デフォルトの名無しさん:01/11/03 18:00
>>31
なんでMSBにTAGつけるのにアラインさせるの?
LSBも空きができるじゃん。

36 :デフォルトの名無しさん:01/11/03 18:02
>>34
違う。最初のLISPはIBMの機械。
Macの実装が多いのは、昔からメモリたくさん積んでたし、
リニアで何メガバイトもアクセスできるという、68000の石の特性も
あると思う。

37 :デフォルトの名無しさん:01/11/03 18:06
>>33
仮引数って (defun hoge (hage) ..)
の hage の部分ですか? それも動的スコープだと思う.

>>34
初期の MacLisp という名が混乱の元では.

38 :デフォルトの名無しさん:01/11/03 21:01
>>36,37
なるほどー。ありがとです。

39 :33:01/11/03 21:05
>>37
hageの方です。

40 :デフォルトの名無しさん:01/11/03 22:25
MacLispと InterLispが 2大 Lispだったんだっけ。CommonLispができる前は。
たしかどっちも動的 scopeだと聞いた記憶がある。
そこに静的 scopeの schemeが気炎を吐いていたと。

静的 scopeの方が compileするためには楽だけど、interpreterだと
そんなに問題にならないのかもな。
macroとか書くときにイヤーソなことにならないかしらん。

41 :暗黙の名無しさん:01/11/04 02:01
>35 MC68000はアドレス上位8bitはバスに出力されないから最初から空いてるの。

42 :デフォルトの名無しさん:01/11/04 02:12
キーボードマクロ使うときに数字をインクリメントしていきたいときってあるじゃない?
そのときのために
set-g-value : (setq gGlobalValue num)
inc-g-value ; (setq gGlobalValue (+ gGlovalValue 1))
put-g-value ; (insert int-to-string gGlobalValue)
って3つのコマンド作ったんだけど、もしかして標準で同じようなのってある?

43 :デフォルトの名無しさん:01/11/04 03:37
>>42
1+ のような関数ならあるけど, 破壊的なのはないと思った.
破壊的な汎用 1+ は macro で書ける. elisp manual の macro の所に
サンプルがあったと思う.

僕はキーボードマクロでも eval-expression を使うことが結構あるな.

44 :デフォルトの名無しさん:01/11/04 05:06
使われている言語が Lisp なのは 開発者の Stallman が Lisp の本家である
MIT AI Lab. の出身で、彼自身が Lisp プログラマだから。

ということは偶然が単に定着しているだけかな。

45 :デフォルトの名無しさん:01/11/04 05:40
gclな何で普及しないんですか?

46 :デフォルトの名無しさん:01/11/04 09:59
45です。
gclを早速動かしてみようとおもいcygwinに入れました。
インストールの途中でraw_gcl.exeがスタックダンプを
吐き出して止まります。。。どうしよう。

47 :デフォルトの名無しさん:01/11/04 10:39
ソース付きのCommonLisp処理系で一番有名なのってgcl?
ソースのコメントに日本人の名前が入ってるから
これ使いたいけど自分じゃちょっと厳しいかも。

48 :匿名λ式:01/11/04 12:18
>>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式は動的に変化するのが特徴の一つだから何か変な話だけど。

49 :45:01/11/04 12:49
自己レス
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ソースの中へ入ってがんばるか、あきらめて他の
マシンで使うか。んー、、

50 :デフォルトの名無しさん:01/11/04 16:57
ちと役不足かもしれんが、CL packageに incfがあったような >>42

51 :デフォルトの名無しさん:01/11/06 15:32
age よう

52 :デフォルトの名無しさん:01/11/06 21:10
あのー、
Meadowつかい始めたんですが、デフォルトだとc/c++モードの
オートインデントが半角スペースなんです。
4タブにしたいんですが、どうしたらいんですか?

53 :デフォルトの名無しさん:01/11/07 00:32
>>48
動的スコープは、Schemeなら簡単なマクロで書けるでしょ。

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

やっぱりλならα変換ルール(束縛変数の名前を変えても意味が変わら
ない)が成り立ってくれないと…

54 :デフォルトの名無しさん:01/11/07 00:37
fooとbarのケースでは無理>53

55 :デフォルトの名無しさん:01/11/07 02:20
>>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とかの名の)マクロを使うけど。

56 :デフォルトの名無しさん:01/11/07 09:02
>>55
そりゃ、xをグローバルにすりゃ書けるだろ

57 :デフォルトの名無しさん:01/11/07 13:40
>>56
shallow bindingっていう手法だけど、知らないのかな?
Emacs Lispがやってるのは、本質的にこれと全く同じ。

58 :56:01/11/07 14:47
>>57
知ってるよ
でも意味が異なるだろ

59 :デフォルトの名無しさん:01/11/07 16:37
漏れがEmacs Lisp スレ立てたときは
「Unix板逝け **終了**」
で終わったのに、この違いはなんだ(藁

60 :デフォルトの名無しさん:01/11/07 18:38
>>59
多分、>>3のおかげ。あの質問のおかげで最初の十数レスがまともな物になって、
そのおかげでそれに続く話題も(終了などにならずに)まともな物になりました。
(そういう雰囲気が作られたわけです)
2ちゃんでは、スレの初めの方のレスはかなり大きな意味を持っています。

61 :デフォルトの名無しさん:01/11/07 19:00
でも大部分が lisp 談義になっているような.

62 :デフォルトの名無しさん :01/11/07 19:05
>>59
こめんな、それ言ったのはおれだよ

63 :デフォルトの名無しさん:01/11/07 20:53
>>58
どう違うの? 全く同じだと思うが。

64 :58:01/11/07 21:30
>>63
ごめんよ。勘違い。
fluid-letの存在忘れてた。

65 :デフォルトの名無しさん:01/11/08 02:24
>>61 まー、マターリしてていいでしょう。
H○PやR○byの煽り合いスレよりゃぁだいぶんマシ。

66 :デフォルトの名無しさん:01/11/08 09:42
>>65
ひとつ気づいたんだけど、ある程度難しい話をしてると、奴等は寄ってこないんだよね。

67 :匿名λ式:01/11/08 09:55
>>53
> でも、名前がうっかりぶつかるとプログラムが壊れるから不便だよね。
> >動的スコープ。

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

>>55の実装のためには、「thread-localな環境」が欲しくなるな。< multi threaded
こういう研究や実装って最近どうなんですか? > 現役の方々

68 :デフォルトの名無しさん:01/11/08 10:07
外に出て x を書き換えてから継続で中に戻ると、書き換えた内容が忘れられてしまうという簡単な問題をなぜ誰も気がつかないのだろう?

そーか、ここのひとはみんな優しくてそのようなあたりまえのことは指摘しないのかな。

69 :デフォルトの名無しさん:01/11/08 11:50
Emacs Lispに再入可能な継続があるのかよ。

70 :デフォルトの名無しさん:01/11/08 15:05
もしくは>>68はdynamic-windをよく知らないのだろう。


71 :デフォルトの名無しさん :01/11/08 18:21
仕事してる振りしてELispで遊ぶ、これ最強。

72 :デフォルトの名無しさん:01/11/08 23:56
xyzzyは?

73 :デフォルトの名無しさん:01/11/09 00:21
なんで xyzzy は scheme ではなく CommonLisp なのだろうか.
どうせ elisp と互換がないのだったら scheme にした方が
よかったような気がするんだけど.

74 :デフォルトの名無しさん:01/11/09 00:27
Schemeは実用性の無いRubyみたいな言語だから。
汚くてもC++の方が実用性あるのといっしょ

75 :デフォルトの名無しさん:01/11/09 06:50
>>74
Whats?

76 :デフォルトの名無しさん:01/11/09 07:43
dynamic-wind を知らないというのはどちらのことやら。
試してからいえっつーの。

もし、dynamic-wind をよく知っているのに問題に気づかないというなら
lexical scope か代入のことをよく知らんのだ。

77 :デフォルトの名無しさん:01/11/09 10:33
>>76
まさか、>>55にでてくるトップレベルのxが
実際にxという変数名だと理解してるのだろうか?

78 :デフォルトの名無しさん:01/11/09 13:15
>>76 何が気にくわないのか良くわからんが、>>55 は確かに
Schemeのfluid-letと同等ではない。
しかし、Emacs Lispのdynamic scope変数とは同等だろ?
(ここはElispスレだということを理解してる?)

79 :デフォルトの名無しさん:01/11/09 14:57
>>74
Rubyに実用性が無いという点にのみ同意。

80 :デフォルトの名無しさん:01/11/09 15:36
>>79
厨房を呼ぶ呪文か。やめい。禁ッ

81 :デフォルトの名無しさん:01/11/10 02:30
dynamic scope の特徴は使わない方で
明示的に仮引数でやるようにした方が見通しいいと思うんだけど,
結構いろいろな package で使ってるようですね. skk とか wl とか.

82 :デフォルトの名無しさん:01/11/10 07:03
Lambda -- The utimate thread

83 :デフォルトの名無しさん:01/11/10 23:10
dynamic-windよーわからん

84 :デフォルトの名無しさん:01/11/14 02:18
(setq gnu '(gnu is not unix))

85 :デフォルトの名無しさん:01/11/14 07:36
(setq gnu `(,@gnu is not unix))

86 :匿名λ式:01/11/14 23:18
(letrec
((gnu (gnu is not unix)))
gnu)

87 :デフォルトの名無しさん:01/11/15 01:11
誰か無限ストリームとして gnu を扱って下さい

88 :デフォルトの名無しさん:01/11/15 02:04
(define gnu (cons 'gnu (delay gnu)))

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

しかし全然Emacs Lispと無関係。

89 :デフォルトの名無しさん:01/11/15 02:09
is not unix
を忘れてる。

90 :名無しさん@お腹いっぱい。:01/11/15 09:47
ここの人たちはVisualStudioを使うべきところでもEmacsですか?
ウィザードまでは使ってもあくまでソース編集からコンパイルまでは
Emacsですか?

91 :デフォルトの名無しさん:01/11/15 14:14
VisualStudioってEmacs Lispがつかえるの?

92 :名無しさん@お腹いっぱい。 :01/11/15 14:55
>>91
それは無理だと思うけどウィザードで生成したコードを、
編集するところにEmacs使ってるのかなっておもってさ。

93 :デフォルトの名無しさん:01/11/15 15:31
windowsでfull実装のemacsってあったっけ?

94 :デフォルトの名無しさん:01/11/15 15:46
>>93
Meadow は違うの?

95 :デフォルトの名無しさん:01/11/15 16:58
meadow とか NTemacs とかの windows 用 emacs って
非同期プロセスは使えるの?
dos の時はもちろん使えなかったけど.

96 :匿名λ式:01/11/16 03:32
>>93
XEmacs動いてるんちゃう?

97 :デフォルトの名無しさん:01/11/17 23:29
EmacsをWindowsキーバインドにするマクロ無い?

98 :デフォルトの名無しさん:01/11/18 02:02
マクロはないが, pc-binding-mode という関数のが望む
ものかも.

99 :デフォルトの名無しさん:01/11/18 03:22
>>97
変態配置覚えちゃいなよ。
一週間もあれば慣れるよ。

100 :97:01/11/18 03:51
>>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 次検索/前検索

101 :デフォルトの名無しさん:01/11/20 09:11
100get!

102 :デフォルトの名無しさん:01/11/20 09:12
間違えた、、、鬱だ

103 :デフォルトの名無しさん:01/11/20 18:45
プ板にある意味が無いな。もうちょっと言語よりな話題がしたい。
;; しかし scheme とかに逸れていってしまうんだな...

104 :名無しさん@XEmacs:01/11/23 14:23
User-agent: な環境で、絶対パスを表す文字列から、そのファイルのタイムスタ
ンプを得るにはどのように書けばいいのでしょうか?

diredは `ls -l` を使ってるらしいと聞いたのですがelisp単体では無理?

105 :デフォルトの名無しさん:01/11/23 15:43
>>104
User-agent: がどう関係するのかわからんが、file-attributes じゃダメなの?

106 :デフォルトの名無しさん:01/11/24 01:36
>>100
xyzzyならGates.lてファイルが用意されているんだけどね。
Emacsでは選択テキスト(リージョン)の反転表示は
無理じゃないかな?

107 :デフォルトの名無しさん:01/11/24 03:15
>>106
無理じゃない.
transient-mark-mode

108 :デフォルトの名無しさん:01/11/24 17:49
>>106
しかし Gates.l とは (ワラ
けどスレと全然関係無いね。

109 :名無しさん@XEmacs:01/11/24 17:54
>>105
できました!
(format-time-string "%Y/%m/%d %T" (nth 5 (file-attributes "/home/hoge/.emacs")))

110 :名無しさん@Emacs:01/11/26 12:48
("a" "b" "c" "d" "e" "f"...)
みたいなリストの中身を全てconcatするときって普通どうやります?

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

111 :名無しさん@Emacs:01/11/26 13:00

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

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

だと、リージョン指定してないときにエラーがでます。

112 :デフォルトの名無しさん:01/11/26 13:06
>>110
(apply 'concat '("a" "b" "c"...))
普通かどうか知らんけど。

113 :名無しさん@Emacs:01/11/26 13:08
>>112
サンクス! apply の存在を知りませんでした。逝ってきます。

114 :名無しさん@Emacs:01/11/26 14:03
>>111 自己レス

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

transient-mark-mode の場合、transient-region-active-p で
region が指定されてるかどうかチェック出来るみたいなので、
それを使うことによって解決しました。

115 :デフォルトの名無しさん:01/12/05 10:00
お前ら、最近どうなのよ?

116 :デフォルトの名無しさん:01/12/05 14:22
まぁ、ぼちぼちって感じ?

117 :デフォルトの名無しさん:01/12/05 17:06
なにが?

118 :デフォルトの名無しさん:01/12/05 17:07
文字列をn回繰り返すために、
(let ((f
(lambda (n)
(if (> n 0)
(concat "もじれつ"
(apply f (list (- n 1))))))))
(apply f (list 3)))
というコードを書いてみたが、apply() 使うと引数をいちいち
list() でくくらんといかんのが気に食わんのだけど。
他にクロージャを実行する関数ってどんなのがあったっけ?

119 :デフォルトの名無しさん:01/12/05 17:11
funcall は?

120 :118:01/12/05 17:34
>>119
ありがとう。括弧がひとつ減ったよ。

121 :デフォルトの名無しさん:01/12/05 17:48
>>118
のようなやつって scheme みたいな lexical scope の
ものでは動かないんだけど、Emacs lisp では
普通の手法ですか?

122 :デフォルトの名無しさん:01/12/05 19:22
letをletrecにすればschemeでも動くよ。>121

123 :デフォルトの名無しさん:01/12/05 19:35
>>118
schemeならもっと簡潔に書けるよ。

124 :デフォルトの名無しさん:01/12/05 19:44

つーか末尾再帰(非再帰ループ)でかけるんじゃ?

125 :デフォルトの名無しさん:01/12/05 19:52
schemeならこんなかんじかな?
(letrec ((f (lambda (n)
(if (= n 0)
""
(string-append "もじれつ" (f (- n 1)))))))
(f 3))

126 :デフォルトの名無しさん:01/12/05 21:01
named-letだと
(let f ((n 3))
 (if (= n 0)
  ""
  (string-append "もじれつ" (f (- n 1)))))

127 :デフォルトの名無しさん:01/12/05 21:21
んじゃ非再帰版(末尾再帰)
(let f ((n 3)(r '()))
 (if (= n 0)
  (apply string-append (reverse r))
  (f (- n 1) "もじれつ")))

128 :デフォルトの名無しさん:01/12/05 21:22
まちがえた
(let f ((n 3)(r '()))
 (if (= n 0)
  (apply string-append (reverse r))
  (f (- n 1) (cons "もじれつ" r))))

129 :121:01/12/05 21:37
いや letrec は知っているんですけど,
dynamic scope であることに依存して書くのは
コーディングスタイルとしてどうなのかなと思って.
まあ emacs lisp だからいいんだろうけど.
僕もそうやって書いてるし(藁

130 :デフォルトの名無しさん:01/12/05 23:07
>>129
dynamicかlexicalかの問題じゃなくないか?
Emacs Lispのletがschemeのletrecと同じなんでしょ?

131 :デフォルトの名無しさん:01/12/05 23:11
ちょっとだけさわってみたんですが、
これってインデントはemacs-lisp-modeあたりに任せるとして、
改行はどこでやるのが普通なんでしょうか?
さっぱり見当がつきません。

132 :名無しさん@Emacs:01/12/16 11:49
age てみよう

133 :ageたら食い付く冬の厨:01/12/16 12:42
MacOSXはコード書くのは全てemacsですが何か?
ProjectBuilderのエディタなんか使ってられっか!(`Д´)

134 : :01/12/16 13:01
MacOSX のemacs って,GUIつかないの?

135 :デフォルトの名無しさん:01/12/27 14:54
教えてください
なぜ (cons (cons 10 20) (cons 30 40))
が ((10.20) (30.40))
でなく ((10.20) 30.40)
の形になるのでしょうか?
考えると夜もねむれません



136 :デフォルトの名無しさん:01/12/27 15:24
なんか違うのか?その二つ

137 :135:01/12/27 15:36
要素は
((10 20) 30 40)場合
第1 (10 20)
第2 30
第3 40

(10 20) (30 40)の場合
第1 (10 20)
第2 (30 40) です

138 :デフォルトの名無しさん:01/12/27 16:08
>>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)

139 :デフォルトの名無しさん:01/12/27 16:11
自分でプリティプリンタ書いてみるとわかりやすいかも。

140 :デフォルトの名無しさん:01/12/27 16:13
(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))

141 :デフォルトの名無しさん:01/12/27 16:23
>ドット対表現は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)))

142 :135:01/12/27 16:25
ていねいな答えを頂いてありがとうございます。
形式的にそのように出るということでしょうか?

ただ、不思議なのは 上記  1 2 (3 4)でもよさそうなものなのに
なぜ cdr 側が (1 2) 3 4 でしょうか?

143 :デフォルトの名無しさん:01/12/27 16:31
>>142
>ただ、不思議なのは 上記  1 2 (3 4)でもよさそうなものなのに
>なぜ cdr 側が (1 2) 3 4 でしょうか?
意味わからん

144 :135:01/12/27 16:37
すみません リロードしてなかったもので
参考にさせていただいてちょっと考えてみます
listは純リストを作成する関数ですよね?
ですので list 1 2 はセル的に
[1][→] [2][nil]ですよね
(1 2) 3 4はどのようなセルになるのでしょうか?

勉強し始めの初心者ですみません

145 :デフォルトの名無しさん:01/12/27 16:49
dynamic scope を上手く使って message passing って出来ます?

146 :デフォルトの名無しさん:01/12/27 16:52
>>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)))

それとも括弧で括ってないって事は、多値のことかな

147 :146:01/12/27 16:53
>ドット対であらわすと((1 . 2) . (3 . (4 . nil)))
まちがい。
ドット対であらわすと((1 . (2 . nil)) . (3 . (4 . nil)))

148 :デフォルトの名無しさん:01/12/27 16:54
>>144
((1 2) 3 4) は ((1 . (2 . nil)) . (3 . (4 . nil)))

149 :135:01/12/27 16:59
>148
その場合セルは
[*1参照][*2参照]
*1[1][*3参照]
*3[2][nil]
*2[3][*4参照]
*4[4][nil]
ですよね? 1.2のペアと3.4のペアがある
その時なぜ 1.2のペアだけ ( )が付くのでしょうか?

150 :デフォルトの名無しさん:01/12/27 17:10
>>149
これでどう?等幅フォントでみてね。
┌─┬─┐ ┌─┬─┐ ┌─┬─┐
│││─┼→│││─┼→│││/│
└┼┴─┘ └┼┴─┘ └┼┴─┘
│ ↓ ↓
│ 3 4

┌─┬─┐ ┌─┬─┐
│││─┼→│││/│
└┼┴─┘ └┼┴─┘
↓ ↓
1 2

151 :デフォルトの名無しさん:01/12/27 17:12
>>149
ルートのconsのcarにlistつくってるからだよ
([]←この表記ほとんど意味無いからやめたほうが良いよ)

152 :デフォルトの名無しさん:01/12/27 17:15
>>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))

だよ?

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

自分でオブジェクトを文字列に変換するプログラムを作ってみろ。

154 :デフォルトの名無しさん:01/12/27 17:17
やっぱ最初はドット対の辺でつまずくよね。
「なんでcdrだけ特別扱い?」みたいな(w

155 :デフォルトの名無しさん:01/12/27 17:20
>>154
cdr のどこらへんが特別扱いっぽいのでしょう?
うにゃ?

156 :デフォルトの名無しさん:01/12/27 17:23
>>155
carはほとんどがatomで、cdrはpairかnil
引数や内部イテレータもcdrの方向だし。
特別扱い、というかcar/cdrの使い道が異なる。

157 :デフォルトの名無しさん:01/12/27 17:25
(a b c d e f)をcar方向に伸ばしたlist
((((((nil . f) . e) . d) . c) . b) . a)

158 :デフォルトの名無しさん:01/12/27 17:30
>>156
使い道が異なるってことで納得。

>>157
前から順番に使っていくってことも先入観というか、固定観念ってこと
ですね。うっかり、当然とか思ってしまいそうですけど。

159 :135:01/12/27 17:38
すみません 私の質問がまとを得ていないようで
まず、前提として (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))のようになるのでしょうか?

160 :135:01/12/27 17:42
多分私は 中途半端なCプログラマがC++をやって
”なんで 呼んでもいない関数が実行されるんだ!!”
と言ってるのと同じ気はしますが、Liaperにとっては
空気のように当然のことだと

161 :135:01/12/27 17:47
みなさん ありがとうございます。 今わかりました。
cdr部はnilに突き当たるまで展開されるんですね。

ありがとうございました。

162 :デフォルトの名無しさん:01/12/27 17:53
>>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 部に他のセルへのポインタをセットする
感じだと思います。

163 :デフォルトの名無しさん:01/12/27 18:00
これでどう

(equal (cons (cons 1 2) (cons 3 4))
'((1 . 2) . (3 . 4)))
=> t

164 :135:01/12/27 18:02
>>162
すみません気をつけます。

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

やっとわかりました cdr部は全ての要素まで
伸びるんですね

165 :匿名λ式:01/12/27 21:10
>>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に過ぎません。

166 :デフォルトの名無しさん:01/12/27 22:05
nilはコンスセルじゃなくてアトムなのでは。
コンスセルかリストかで分けるならリストになるはずだし。

167 :匿名λ式:01/12/28 01:12
>>166
確かに。チョト勢い余った。

168 :デフォルトの名無しさん:01/12/28 02:09
(listp nil) =>t になるよ.

169 :名無しさん@Emacs:01/12/28 04:06
(atom nil) も
=> t
だよ

170 :デフォルトの名無しさん:01/12/28 04:53
nil は atom でも list でもある唯一の要素です.

171 :デフォルトの名無しさん:02/01/10 07:09
defsubst でインライン関数を定義したとき、
これを再帰呼出しした時にはどのように
扱われるのでしょうか?

172 :デフォルトの名無しさん:02/01/10 11:33
ふつうに関数呼び出しが行われるみたい。
M-x disassemble 使え。

173 :デフォルトの名無しさん:02/01/11 17:07
Emacs最高です。結婚してもいいですかー?!

174 :名無しさん@Emacs:02/01/11 17:31
test property の field についての説明はどこかにありますか?
M-x shell のプロンプトに使われていて、C-a の挙動に影響しているのですが
詳しく知りたいのです。

175 :Lisp 1.5:02/01/12 01:04
>>173
許す。ただし、持参金はたっぷりな。生命保健にも入ってもらう。

176 :名無しさん@Emacs:02/01/15 12:12
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 というファイル名が渡ってしまって困るのですが、これはそ
ういうものなんですか?

177 :デフォルトの名無しさん:02/01/15 12:21
>>176
> (interactive "fDirectory: ")
でなくて
(interactive "DDirectory: ")
では?

178 :リスプ?:02/01/15 13:26
ソートのプログラムをEmacs Lispでの書き方を教えてください!!
おねがいします。

179 :名無しさん@Emacs:02/01/15 14:30
>>177
あ・・・そうですね。本にそう載ってたんですが。
単純なこと聞いてすみません。

>>178
何をどう sort したいのか書かなきゃ答えようがないのでは?
# どっちにしても私も分からないけど。

180 :リスプ?:02/01/15 16:00
>179 そうですね。ありがとうございます。
引数にランダムな数字のリストをおいたとき、値として大きい(小さい)順に
並べ替えられたリストが出力されてくるようなプログラムを教えてもらいたいのです。
よろしくおねがいします。

181 :デフォルトの名無しさん:02/01/15 16:30
>>180
sort とか stable-sort とか?

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

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

182 :教えてください!:02/01/15 16:34
関数としてsortを定義するとどうなるのでしょうか?
(dufun sort ・・・)見たいな感じで教えてもらえないでしょうか?
おねがいします。

183 :デフォルトの名無しさん:02/01/15 16:51
>>182
や、もとからあるでしょ。

184 :教えてください!:02/01/15 16:55
実は大学のレポートでsortを定義しろっていう問題が・・・
けど、ぜんぜんわからなかったので。

185 :名無しさん@Emacs:02/01/15 19:28
やさしい Emacs-Lisp 講座を読んで Dired もどき作成中です。
ほーこんなこともできるのかぁって感じですごく(・∀・)イイ!!
それだけ。

186 :デフォルトの名無しさん:02/01/16 06:00
教えて君ウザすぎ。
つーか sort なんて簡単でしょ?
;; しかし elisp でやれとは、物好きな奴がいたもんだな。

187 :デフォルトの名無しさん:02/01/16 12:55
sexp は男性ですか?女性ですか?という意味でしょうか。
それとも セクース しようぜ!でしょうか。

188 :デフォルトの名無しさん:02/01/16 19:54
上の教えて君じゃないがクイックソートを書いてみようとした。
edebug 中に g で Go! したら Meadow さんはお亡くなりになった。(-_-)ウツダ

189 :デフォルトの名無しさん:02/01/16 19:55
しまった。ageてしまいました。
逝ってきます。

190 :デフォルトの名無しさん:02/01/16 21:05
>>184
http://www.google.co.jp/search?q=lisp+sort&hl=ja&lr=

191 :デフォルトの名無しさん:02/01/16 23:06
p は predicate です.
object が sex であるかどうかを調べます.

192 :「リスト遊び」:02/01/16 23:52
coffeep 「コーヒーはいかがですか?」

193 :デフォルトの名無しさん:02/01/17 06:25
t


194 :名無しさん@Emacs:02/01/17 11:10
>>188
> 上の教えて君じゃないがクイックソートを書いてみようとした。

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



195 :名無しさん@Emacs:02/01/18 12:56
邦訳 Emacs lisp リファレンスマニュアルの改定版 でないかなー。
だれか翻訳してる?

俺がやるとしたら、前のやつを利用してもいいの?
あのマニュアルって GPL なの?
やり始めた後で出版されると、徒労だなー。


196 :デフォルトの名無しさん:02/01/18 16:00
>>195
元のドキュメントが GPL なんで、翻訳も GPL だよん。
ソースは ftp.ascii.co.jp/pub/GNU や openlab.ring.gr.jp/gnujdoc あたりに。


197 :名無しさん@Emacs:02/01/19 16:02
asciiのほとんどtexiを印刷しただけっぽいリファレンス本を買った
漏れはイッテヨシだった…


あとで存在を知った邦訳のオンラインマニュアルのが数倍つかいやすいでやんの

198 :Emacs-Lisp厨:02/01/19 17:13
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)))))


199 :Emacs-Lisp厨:02/01/19 17:17
あ…最後に kill-buffer 足したはずなのに古い方コピーしてしまった。

# あとsave-excursion の使いかたとかいまいちよくわかっていないのですが…


200 :デフォルトの名無しさん:02/01/19 17:58
>>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))

いちいちバッファに書く必要なんぞない。

201 :Emacs-Lisp厨:02/01/19 18:20
なるほどー。mapc というのは mapcar のことですか?
やっぱりこれくらい単純になるんですね。replace-in-string というのも初め
て見ました。勉強しに逝ってきます。

202 :デフォルトの名無しさん:02/01/19 19:18
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.

結果をリストにする必要がないから若干効率がいい。

203 :デフォルトの名無しさん:02/01/19 19:23
つーかdescribe-functionくらい知ってれば、directory-filesでフルパスにさ
せたりパターンを指定したりできることくらいすぐ分かるはずだ。
標準だったらC-h fでできるからこれくらい覚えとけ。あとC-h vモナー。


204 :Emacs-Lisp厨:02/01/19 20:15
>>202
describe-function はしたんですが、mapcar と mapconcat しかなかったので。
何でだろ…

205 :デフォルトの名無しさん:02/01/19 20:43
>>202
> 結果をリストにする必要がないから若干効率がいい。
嘘書いちゃだめだよ。lisp/emacs-lisp/cl-extra.el 見てみれ。
emacs 21のbuilt-inのmapcならその通りだけど。

>>204
(require 'cl)
あまりお勧めしない。


206 :Emacs-Lisp厨:02/01/19 21:00
Emacs21 にはありました。Meadow にはないのかな…
っと思ったら >>205 の (require 'cl) でできました。
cl ってことは Common Lisp の関数なんですかね。

207 :デフォルトの名無しさん:02/01/19 22:47
>>206
(require 'cl) してまで使う必要ないだろ。mapcar 使っとけ。

208 :Emacs-Lisp厨:02/01/19 23:15
>>207
はい、これから使うときは mapcar 使うつもりです。

ところで replace-in-string って XEmacs にしかないんですかね?

209 :デフォルトの名無しさん:02/01/19 23:21
replace-regexp-in-string がある。

210 :デフォルトの名無しさん:02/01/20 01:55
でも cl の flet とか case とか便利だよね.


211 :デフォルトの名無しさん:02/01/24 10:03
今日の日付から先週の月曜日が何月何日か知りたいんですが、簡単な方法って
あります? calender とか使ってできる方法があれば教えてください。


212 :デフォルトの名無しさん:02/01/24 10:04
calendar ですね。間違えました。

213 :デフォルトの名無しさん:02/01/24 14:52
interactive にやるんなら calendar で日付を mark して
region 間で M-=

lisp でのやり方は知らん

214 :211:02/01/24 19:52
>>213
interactive にではなくて elisp プログラムとして使いたいのですが。

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

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

;; メイルのテンプレート用に勉強のために作るつもりです。
;; 勉強なんだから苦労してでも作れって言われそうですが、なるべく簡単な
;; 方法でやりたいので。(それも自分で考えろ (゚Д゚)ゴルァ だけど)

215 :デフォルトの名無しさん:02/01/24 23:02
なんでメールに先週の月曜の日付をいれんの?

216 :デフォルトの名無しさん:02/01/25 00:04
>>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)))


217 :213:02/01/25 01:22
>>214
こういうのは
describe-key で M-= して
help から calendar.el の該当関数の所にとんで
参考にするといいよ.


218 :211:02/01/25 02:33
>>215
週間作業報告を書くのに先週一週間分の日付を入れなきゃいけないので(w
今は手作業で入力してるんで面倒なんですよね。

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

>>217
わかりました。これから lisp のソースもいろいろ読んで研究します。
;; TAGS ファイルも作れたし。

219 :デフォルトの名無しさん:02/02/01 12:58
あげ

220 :名無しさん@Meadow:02/02/07 23:26
>>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)))


221 :デフォルトの名無しさん:02/02/08 02:18
参考になりそうなのが hnf-mode.el にあるよ。

222 :名無しさん@Emacs:02/02/08 10:30
>>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

;; ズルをして某板でも質問をしたかもしれません(-_-)ウツダ

223 :名無しさん@Emacs:02/02/08 10:50
あ、あと土日のことは全く考えてませんでした。
土日に使うことはないかなぁと思って。

224 :デフォルトの名無しさん:02/02/08 22:01
>>221
hnf-float-time で浮動小数点型にして、適当な演算後に hnf-time-float で
リストに戻しているが、そこの処理のおかげで Nemacs で動かないという(藁

そういえば Emacs21 には float-time という built-in が追加されたけど、
time-float はないのよね。


225 :デフォルトの名無しさん:02/02/08 23:42
>>244
フォローありがと。

226 :225:02/02/08 23:45
う。>>224 ね。

227 :名無しさん@Meadow:02/02/28 18:59
メンテ上げ。
#もう落としてしまった方がいいんだろうか?

おまけで、遅い 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")))


228 :デフォルトの名無しさん:02/03/07 18:26
age

229 :デフォルトの名無しさん:02/03/09 02:17
(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
:

230 :デフォルトの名無しさん:02/03/09 04:10
closure が無いんじゃないの?


231 :デフォルトの名無しさん:02/03/09 05:54
XMLSchemaに対応したメジャーモードなんていつごろ完成するかな?
そんなの作ってるなんて聞いたことないし。自分で作れてってことだね。
これは。

それにしてもUNIXな人たちはXMLになんであんなに無関心なんだ?

232 :名無しさん@XEmacs:02/03/09 10:57
(require 'cl)

(lexical-let ((x 0))
(defun foo ()
(setq x (+ x 1))))


233 :デフォルトの名無しさん:02/03/09 11:07
`:foo' みたいなシンボルはどういう時に利用してますか?


234 :デフォルトの名無しさん:02/03/09 16:12
>>232
なるほど、ありがとう。

235 :デフォルトの名無しさん:02/03/10 00:55
emacs lisp wizard の方、教えて下さい。

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

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

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

ちなみに cl には flet という便利なものも
あるんですが、残念ながらこれは lexical では
ない様子。lexical-flet みたいなのがあればいいのに。


236 :235:02/03/10 16:48
一応報告。
その後 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 な変数や関数を考えて作ってないので、
仕方ないのですが。

237 :名無しさん@Meadow:02/03/11 01:17
>>234,235
>長々と余計なコードを .emacs に書きたくなくて。
>advice でできれば数行ですむのに、
本当にこっちの優先度が高いのなら、元の関数をバイト・コンパイルしなけれ
ばなんとかできそうな気もするが。


238 :235:02/03/11 02:45
>>237
自分で advice もどきの macro を作って、
一応できるにはできたのですが、(byte-compile してても OK)
しかしそうすると advice に対応できなくなって
汎用性がなくなるので、結局使うのはやめました。

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

(defmacro new-hoge ()
`(labels ((new-func () old-func))
,(symbol-function 'hoge)))


239 :237:02/03/11 12:39
>>238
236 では書き換え対象が car だったのに、old-func に変わっちゃったわけね。


240 :名無しさん@Meadow:02/03/11 13:08
(´-`).。oO(adviceって何だろう?)

そういえば起動時 loading adviceってあるな。
hook みたいなもんかな。

241 :デフォルトの名無しさん:02/03/15 04:58
>>240
advice は既存の関数を書きかえる時に便利だよ。
とりあえず elisp の info でも読みな。

242 :デフォルトの名無しさん:02/03/15 18:16
(eval-and-compile
(require 'hoge))

(require 'hoge)
はどのように効果が違うのか誰か教えてくだされ。


243 :読まずにカキコ:02/03/15 18:43
>242
上だと(require ..)の結果を実行してしまわないか?

244 :242:02/03/16 04:27
;; 読まずにカキコ って……、そんなにレベル低いかなぁ。
> 上だと(require ..)の結果を実行してしまわないか?
どちらでも実行(というか評価)されるんじゃないのですか?


245 :デフォルトの名無しさん:02/03/16 10:38
>>244
場合による。


246 :名無しさん@Meadow:02/03/22 07:32
emacs lisp でマルチスレッドな処理ってできるんですか?
絶対無理?


247 :デフォルトの名無しさん:02/03/22 09:06
>>246
つーかemacsのマニュアルみてよ
多分無理だと思うけど

248 :Lisp 1.5:02/03/22 10:23
>>246
無理。process filter使って複数のprocess/network stream扱うのは可能。

249 :デフォルトの名無しさん:02/04/03 14:50
ELF が面白い。


250 :デフォルトの名無しさん:02/04/04 17:25
buffer local function ってできないかな?
あるバッファでだけ関数をおきかえたいっての。
できたら少し便利かも??


251 :名無しさん@Emacs:02/04/06 11:22
>>250
あるモードでだけおきかえる、ってのじゃだめなの?

252 :デフォルトの名無しさん:02/04/06 21:13
OOっぽくていいかもな。


253 :デフォルトの名無しさん:02/04/12 16:03
(age)

254 :名無しさん@Emacs:02/04/15 22:33
Emacs Lisp かじり始めの厨房です。
Perl でいうところの、
$data{'name'}='Mona';
$data{'age'}=14;
$data{'prop'}='AA';
push(@list,\%data);
みたいなデータ構造をEmacs Lispでやるには
どうしたらいいですか?

255 :デフォルトの名無しさん:02/04/15 23:08
alist(連想リスト)かな。
(setq data '((name . "Mona") (age . 14) (prop . "AA")))

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

;; あんま自信なし(汗

256 :デフォルトの名無しさん:02/04/16 01:06
?\x20を評価させると 32になるので、
16進数を10進数で表示させる関数を作ろうと思いました。
が、引数で '20'が渡ってきたとして、
?\x20を生成&評価させることってできるのでしょうか?


257 :デフォルトの名無しさん:02/04/16 06:45
>>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 とか使っててダサいな。
誰かまともなの示して。


258 :デフォルトの名無しさん:02/04/16 12:42
(car (read-from-string [string]))

(read [string])
でいいのでは?
どうせエラー処理しないなら


259 :257:02/04/16 13:44
むぅ、read で直接文字列食わせれるのか。
ところで read-from-string だとどのようにエラー処理ができるのか
Info 読んでもよく分らん。よろしければ教えて。


260 :デフォルトの名無しさん:02/04/16 14:37
質問して答えてもらったのにできたともできないとも言わない奴なんとか言え。
;; とか思うのは俺だけ?

261 :デフォルトの名無しさん:02/04/16 23:03
>>257,258
できました。ありがとうございます。
\?\xってやってできなかったので、
Cみたいな関数つくってでガマンしてました。(w


262 :256,261:02/04/17 00:00
>>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))))



263 :258:02/04/17 02:12
>>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)))))


264 :257:02/04/17 02:59
>>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 がない


265 :258:02/04/17 11:43
>>264
signalが発生するような場合ではどっちを使っても大差ない。
read-from-stringに渡せる2つの追加パラメータと、返り値のcdrの情報が利用できるだけです。
readだとall or nothingなので。

266 :デフォルトの名無しさん:02/04/17 17:10
>256
>?\x20を評価させると 32になるので、
とあるけど、これはあくまでchar型を16進表示したものだから、
16進数を10進数に変換させるには不適当。

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

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


267 :257:02/04/17 18:52
>>265
さんくす。

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

これ、FSF でも 21 から使えるようになってるみたいですね。


268 :256,261,262:02/04/17 21:03
>>263
match-string()なんてのもあったのか。サンクス。

>>266
XEmacsは使ってないのですが、とりあえずメモっておきます。
サンクス

269 :デフォルトの名無しさん:02/04/22 09:47
>>250
(current-buffer) を見て分岐する様な関数に置き換える、とか…
…何か問題が出そうで恐いけど。

270 :デフォルトの名無しさん:02/04/22 13:55
自作のライブラリなら funcall すればいいけど、built-in の普通の
関数だとやっかいそうな気がするね。
まぁ、ふつう advice で切り分けるんだと思うけど。
ところで2重、3重に advice が重なると、それらの適用順とか
どうなるんだろう。前から気にはなってるが調べる気力がない。
;; それ以前に知力もない


271 :デフォルトの名無しさん:02/04/25 20:35
defun と defsubst の使い分けの基準はどんなとこなんでしょうか。
たぶん高速化のために inline 展開したいような関数とか、
(nth 3 list) だけなようなものに使うんだろうと思うけど、
そこそこの size のある関数で、それほど速度も要求されてなさげな
ものでも defsubst されてるのを見ると分らなくなってきました。


272 :デフォルトの名無しさん:02/05/07 14:01
age

273 :デフォルトの名無しさん:02/05/07 14:29
あのぉ、質問なんですけど、ウィンドウをスプリットするにはどうすればよろしいでしょうか?

274 :デフォルトの名無しさん:02/05/07 14:40
C-x 2
http://www.sr3.t.u-tokyo.ac.jp/~takekawa/gnujdoc/emacs-20.6/emacs-ja_toc.html
まぬある嫁

275 :273:02/05/07 16:14
>>274
そのまぬあるすごいです。わぁい。
いーまっくす・りすぷでやるには、どういう関数を使ったら
よろしいですか?

276 :Lisp 1.5:02/05/07 17:08
>>275
split-window-vertically

M-x help-for-help k C-x 2

277 :273:02/05/07 17:15
>>276
できました。おぉー・・。
ありがとうございます!
へるぷクエストへいざ。では。

278 :デフォルトの名無しさん:02/05/26 01:49
下がってんな、下手したら落ちるんちゃうか。

279 :デフォルトの名無しさん:02/05/26 02:11
>>278
UNIX板の方が盛況だね。
あっちはemacsが普段の環境って人もいるし。話も出やすいんでしょう。

280 :KOKUYO:02/05/30 13:53
質問!!member関数を、第2引数のリストの深いレベルまで
第1引数を探索して取り除くように拡張した関数はどうやって
作ればいいんですか?


281 :デフォルトの名無しさん:02/05/30 14:28
>>280
kazu さんの「リスト遊び」を読んでみると楽しいよ


282 :デフォルトの名無しさん:02/05/30 14:54
>>280
マルティは市ね

283 :PLUS:02/05/30 21:22
>>280
ループ判定までやろうと思うと、結構面倒そう

284 :名無しさん@Emacs:02/06/11 18:01
(eval-after-load "hoge"
'(progn
(fset 'old-homo
(symbol-function 'homo))
(defun homo ()
・・・・・・・・・・・)))

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

なんか方法があるの?


285 :デフォルトの名無しさん:02/06/11 18:45
いってる事がよく分からん。
デバッグできないとは homo() を後から edebug しようにもできないのか?
にしても、homo() だなんて、レス付けるのも嫌な関数名にしやがって。

286 :Lisp 1.5:02/06/11 21:55
>>284
「homoをbreakpointに指定したのに止まらない。」
とお前は言いたいのだろう。
debugger何使ってるの? edebugでも駄目か?



287 :284:02/06/11 22:48
>> 285
>> 286
.emacs.el内で、homoをoverwriteして
その中でbreakpoint設定してます。
edebugです。

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




288 :Lisp 1.5:02/06/11 23:05
>>287
ちゃんと調べずに聞き返すけど、
edebug.elじゃなくて、debug.elってことはない?
debug.elはsymbol-functionを書き換えるから。

289 :名無しさん:02/06/26 11:49
誘導ポイント…ごめん、何のことかわかんないこのスレの人たち↓
LISP Scheme Part5
http://pc.2ch.net/test/read.cgi/tech/1023091882/260-

290 :名無しさん:02/06/26 11:50
しまた、誘導ポイント間違えた…逝ってきます。

291 :デフォルトの名無しさん:02/06/26 12:35
もしEmacs Lispでlinuxが書けたら、emacs上でlinux がうごくんですよね?

292 :デフォルトの名無しさん:02/06/26 12:43
>>291 ええと、実はすでにEmacsとLinuxが使ったときの感じとして
同じというか。現状で(学問的に)OSがどう定義されているのか
不勉強で知らないのですが、使った感じはOSそのものです。
Emacs上で動くアプリケーションは、ネットニュースリーダー、
WWWブラウザ、2chブラウザ、エディタ、統合開発環境など。
その他、だれかが
「これはEmacs Lispでは書けないな」とどっかでelisperに言ってしまうと、
それがどこからともなく、 comp.emacs.sources (かな)
にでて来るかもしれないというのは面白いよね。

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



293 :名無しさん:02/06/26 13:18
>292 OSってーか、シェルのような気もする。

294 :デフォルトの名無しさん:02/06/26 13:30
>>293 そうだよね。でも俺が言おうとしたのは、
窓口はシェルだけど、じっさいに欲しいものがあるのは
その奥にあるOSという感じで言ってみたんだけど。



295 :デフォルトの名無しさん:02/06/26 16:03
OSやシェルというよりはミドルウェアのように感じる。

296 :名無しさん:02/06/26 16:39
elisp で、「漏れがどれくらい激しくメモリを使っているか」を調べられないのかな?

297 :デフォルトの名無しさん:02/06/26 20:24
>>296 Elisp マニュアルのガベージコレクションというノード(ページ見たいなもの)
にたぶんそんな感じのものがあるとおもいます。



298 :デフォルトの名無しさん:02/06/26 20:32
よしっ、今日はもう酒が入っちゃったけど、ラブアンドピースで
elispをやるか。寝言みたいなこといってすまん。


299 :名無しさん@カラアゲうまうま:02/06/26 20:35
がんばってくれ。ラブアンドピースで。

300 :298:02/06/26 20:44
>>299 そうなんだよ、ムシャクシャしたときは、
elispハックすると不思議とおだやかな気分になるんだよな。
ってこんな雑談はしていいのだろうか。

301 :298:02/06/26 20:56
>>300 そうそう、そんでEmacsをどんどん進化させてみるか、みたいな。


302 :名無しさん@カラアゲうまうま:02/06/26 20:59
elisp meditationか。カリスマのなせる技、か?

303 :デフォルトの名無しさん:02/06/26 21:10
>> 302 いやカリスマとかなんとかより、そういう感じで
ストレス解消してる人って結構多いぞ。俺はソフトウェア
関連の職についているけど、みんななんていうか、
自分の思いどうりに開発できる俺プロジェクトみたいなの
持っている人ってけっこういるぞ。




304 :名無しさん@カラアゲうまうま:02/06/26 21:16
ま、そりゃ分かる。

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



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



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



308 :デフォルトの名無しさん:02/06/26 22:21
>>307 あーごめんごめん。RMSの目標はフリーソフトウェアだったな。
しかし、そこまで視野を広げるって凄いな。


309 :デフォルトの名無しさん:02/06/26 22:39
>> 308 それとそういうことをした結果として起こることを引き受ける覚悟みたいな
感じかな。


310 :名無しさん@カラアゲうまうま:02/06/26 23:30
>>306
rubyのって、IPAの未踏ソフトウェア創造事業とかいうやつかな。

311 :デフォルトの名無しさん:02/06/27 01:12
>> 310 そうじゃない。でもあれはあれで
金銭的に厳しいけど志があるハッカー(すごいプログラミングをする人という意味)
を最低限救済するシステムとしては、機能してるとおもうけど。

312 :311:02/06/27 01:14
「そうじゃない」というのは「そうだとおもうよ」という意味ね。


313 :名無しさん:02/06/27 14:50
ようやく customize まわりの使い方がわかった…

314 :ななしさん@お腹いっぱい:02/06/29 15:07
Emacs から C で書いた関数を呼び出したいんですが、
どのような方法があるのでしょうか?

dynamic loading というやつ(←まだ内容が良く分かってない)
以外にもやり方があるのでしょうか?

315 :ななしさん@お腹いっぱい:02/06/30 15:01
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) でしか確認してません。

316 :ななしさん@お腹いっぱい:02/06/30 15:03
>315 すんません、なんか let の中で変数がコメントアウトされてます。まちがい。

317 :デフォルトの名無しさん:02/07/01 08:21
>>315
「自慢の.emacsを貼り付けよう」スレって知ってる?
自動切換え可能になったら是非自慢して下さい。

318 :ななしさん@お腹いっぱい:02/07/01 13:52
>>317 了解しますた。でも「マルチポスト」っておこられないかな…(怖

319 :英辞郎 on the Web:02/07/01 20:40
あとまわしになっちゃいましたが、↓のひとたち、ありがd
http://pc.2ch.net/test/read.cgi/tech/1004551074/317
http://pc.2ch.net/test/read.cgi/linux/1021865124/227

320 :名無しさん@Emacs:02/07/05 10:44
なんかネタ無いー?
7行で書けるようなネタ無いー?


321 :名無しさん@Emacs:02/07/09 00:42
関数名って半角カナとかでもいいんですね。*scratch* で遊んじゃった。
まともに役に立ちそうな使い方が思いつかないけど。

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

(゚Д゚) ;; ここでもういちど C-j
"ゴルァ!"

322 :デフォルトの名無しさん:02/07/09 01:10
>>321 知らんかった。

(defun ・∀・ ()
(goto-char (1- (point)))
(princ "イイ!!")
(newline))

323 :デフォルトの名無しさん:02/07/09 08:53
navi2ch で使われてるシンボルを AA にしよう。

324 :デフォルトの名無しさん:02/07/09 09:53
なんか役に立つ使い方無いかなー。うーーん。(←本末転倒)

ところでC言語で

#define _
for(;_;){
}

で無限ループってのがあったね。等幅フォントだと泣いている顔に見える。

325 :デフォルトの名無しさん:02/07/09 12:11
>>323
入力がめんどくさい。

326 :名無しさん@カラアゲうまうま:02/07/10 07:26
>>323
逆か?

327 :デフォルトの名無しさん:02/07/16 16:55
あげ

328 :デフォルトの名無しさん:02/07/17 00:03
なんだなんだ?

329 :デフォルトの名無しさん:02/07/18 00:00
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

330 : :02/07/18 00:24
>>329
length

331 :デフォルトの名無しさん:02/07/18 00:44
Emacs Lisp よくわからんがこんなの
(defun length (x)
(cond ((eq x ()) 0)
(t (+ 1 (length (cdr x))))))


332 :329:02/07/18 00:51
>>330
サンクス

Emacs21.2だと lengthは built-inになっていますけど、
実際のところどういうふうに実装されているのでしょうか?
Cで書いてるの?


333 :デフォルトの名無しさん:02/07/18 01:18
Cでしょう。こんな感じで

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

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

return i;
}

334 :デフォルトの名無しさん:02/07/18 01:19
>>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は末尾再帰もしてくれないので、リスト処理はループに展開するのが
定石っぽい。


335 :デフォルトの名無しさん:02/07/18 01:22
doってあったかな。

(do ((a alist (cdr a))
(i 0 (+ i 1))
((null a) i))


336 :329:02/07/18 01:28
>>333
サンクス。勉強になりますた。

関係ないけど、最近Cでも (if ... とか
variable = if(...).. とか書きたくなってしまう。(-_-)ウツダ


337 :デフォルトの名無しさん:02/07/18 02:07
>>335
(require 'cl) すれば使える。

338 :デフォルトの名無しさん:02/07/19 15:00
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.



339 :デフォルトの名無しさん:02/07/20 19:31
やくせ

340 :Lisp 1.5:02/07/21 12:24
RMSがemacs lispを実装しとった時に「なんで動的scopeやねん?」と聞ーたら、
「静的scopeは非効率すぎー」とはっきり言うたよ。ほんまやよ。

341 :_:02/07/21 13:08
emacsでHOMEを一回押したらback-to-indent。そこでもう一回押したら行頭にいく
ってできますか?昔VisualStudioかDelphiのエディタで重宝した動きなんですけど・・・

342 :デフォルトの名無しさん:02/07/21 13:23
>>341
(defun my-back-to-indentation-or-beginning-of-line ()
(interactive)
(let ((p (point)))
(back-to-indentation)
(if (= p (point))
(beginning-of-line))))
こんな感じでどう?


343 :Lisp 1.5:02/07/21 14:05
>>340
う〜ん「静的scopeじゃあうまくいかんのよ」くらいかな?
"window/buffer/frame local variable"なんかは動的scopeの方が親和性高いし。

344 :デフォルトの名無しさん:02/07/21 14:44
>>343
うーん、そうかなあ。
(let ((var 'hoge)) (with-current-buffer buf (func var)))
とかvarがbuffer localなのを忘れてやっちまった場合、なんで挙動不審なの
か悩むことになる。

ところで、CVSをのぞいてみると、lexbindってブランチがあって、
lexical scopeもbuilt-inでできるように作業してるみたい。


345 :_:02/07/21 14:46
>>342
thx! またemacsがパワーアップ。どこまで逝くんだろう。。。

346 :デフォルトの名無しさん:02/07/21 20:41
もっと、名前空間を功く使えれば…って思う。
buffer とかだけじゃなくて、他の物にも local な変数が欲しくなったりするし…

global の変数の方が、動的の恩恵を受けてそうな気がするな…
let で気軽に束縛して、引数みたいに使えるから。
…本当は、引数にした方が良いんだろうけど。

347 :真性厨:02/08/11 19:17
さあ、おまいら、存分に叩いてください。

(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)))))))


348 :デフォルトの名無しさん:02/08/12 03:26
>>347
えーと…これって、 elisp なんだよね?

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

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

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

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

・あと、 getStringFromList って、標準の関数?
見付からなかったけど…

349 :真性厨:02/08/13 01:34
>>348 おまえ、まことにありがとうございますです。

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

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

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

>えーと…これって、 elisp なんだよね?
いひひひひ…。厨の糞コードの見本ですかね。。。


350 : :02/08/13 01:48
>>347
普通、こういう処理をするときは、
・skip-chars-forward + buffer-substring
・looking-at + buffer-substring
などを使うのが常套手段だ。

どうでもいいけど、括弧が全然合っていないのだが。

351 :デフォルトの名無しさん:02/08/13 01:52
>>349
getStringFromListに相当するのはconcatかな。

352 :真性厨:02/08/13 02:37
>>350,351 おまいら、はげしく感謝いたします。

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

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

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

しかし、まともなのってみんなでかくてむずいんだよなぁ。


353 :デフォルトの名無しさん:02/08/13 03:56
>>352
まずemacs-lisp-introを全部嫁。

354 :デフォルトの名無しさん:02/08/13 04:54
解決したみたいだけど…一応返信。

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

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

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

> いひひひひ…。厨の糞コードの見本ですかね。。。
ごめん、そうじゃなくて…見慣れない関数が有ったりして、不安になっただけ。

355 :真性厨:02/08/15 01:26
>>353 >>354 貴様ら、私はなんといって感謝すればよいのか判りません。

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

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




356 :デフォルトの名無しさん:02/08/18 03:43
red.elどうすか?
http://nicosia.is.s.u-tokyo.ac.jp/boomborg/boomborg-red-j.html
何に使うのかわからんのですが。

357 :デフォルトの名無しさん:02/08/18 04:19
>>356
何に使うの?

358 :デフォルトの名無しさん:02/08/27 17:05
自慢の.emacsを貼り付けよう
http://pc.2ch.net/test/read.cgi/unix/1001393679/621

359 :デフォルトの名無しさん:02/08/29 02:07
http://homepage1.nifty.com/blankspace/emacs/dired.html
の一番上で書かれてる関数dired-find-alternate-fileを
dired-modeになった時に呼び出す方法が分かりません。

教えてクレヨン。。

360 :デフォルトの名無しさん:02/08/29 10:22
>>359
C-h b して探せ。

361 :デフォルトの名無しさん:02/08/30 00:10
いや、まだキーに割り当ててないんだけど

362 :デフォルトの名無しさん:02/08/30 00:34
>>361
なら割り当てろ。


363 :デフォルトの名無しさん:02/08/30 01:58
いや、これってdired-mode時にディレクトリ上で
enter押しても新しいバッファを作らないようにす
るやつみたいなんだけど、それってキーに割り当
てるんじゃなくて。。
うまく説明できないスマソ

364 :デフォルトの名無しさん:02/08/30 02:08
>>363
dired-find-alternate-file って、その場でそこにある file を開くみたいだよ。
mode の切り替えとかじゃなさそうだけど。

365 :デフォルトの名無しさん:02/08/30 03:08
>>364
そういうことでしたか。
dired-mode-mapをどうにかこうにかすれば
いいんですね。ありがとうございました。

366 :デフォルトの名無しさん:02/08/31 03:33
>>365
でけた

367 :デフォルトの名無しさん:02/08/31 08:34
emacsのファイルをxyzzy形式にコンバートするツールないかな

368 :名無しさん@カラアゲうまうま:02/08/31 23:56
>>367
elispライブラリを誰か作ってたような


369 :デフォルトの名無しさん:02/09/01 06:35
>>368
うん。標準のはあるんだけど、それ以外をコンバートしたい。

370 :名無しさん@カラアゲうまうま:02/09/04 14:32
>>369
いや、elispにあってxyzzyにない関数を追加するとか、動作の違いを吸収する
とか、そういうやつ。
yatexの移植か何かで作ってたんじゃなかったかな。


371 :デフォルトの名無しさん:02/09/06 17:21
emacslisp.org が乗っ取られた

http://emacslisp.org/


372 :デフォルトの名無しさん:02/09/06 19:44
>>370
ども。xyzzy関係のリンクにEmacs lisp 移植キットというのがありました。
ttp://members.tripod.co.jp/osuneko/xyzzy/xyzzy.html
これはelisp独自関数をxyzzyで書き直したもので、これを読み込んでも
elispのファイルが素で動くものではないみたいです。
これを元にちょっとじたばたしてみたいと思います。

373 :デフォルトの名無しさん:02/09/16 12:29
age

374 :デフォルトの名無しさん:02/09/18 11:24
お<age>さん


375 :デフォルトの名無しさん:02/09/18 12:22
>>359-366
emacs21 なら a に bind されてるようですが?

376 :デフォルトの名無しさん:02/09/18 12:23
emacs-lisp限定となると、unix板とかの方が食いつき良いかもね。

377 :デフォルトの名無しさん:02/09/18 20:37
MobileGearのPocketBSDでメモリに制限があるため軽いnemacs使ってます。
これは、emacs18.55.1でelispの関数が今のとちょっと(だいぶ?)
違います。そこで、elファイルを書くのに、help functionで検索
しなければならず、大変です。どっかに、elisp18、19、20あたりの
対照表などありませんでしょうか。



378 :デフォルトの名無しさん:02/09/27 05:47
時間の掛かる事を background でさせたくて、色々考えてたんだけど…
emacs --batch --no-site-file でもう一つ起動してみたら、意外に重くなかった。
w3m-antenna 風の関数で使ってみたけど、結構便利かも。


379 :デフォルトの名無しさん:02/09/27 10:46
>>378
お手軽マルチスレッドだね。
もうちょっと、詳しく解説してくれると嬉しいです。


380 :デフォルトの名無しさん:02/09/28 18:55
>>379
させたい処理を prin1-to-string して、 emacs --eval の引数にしてみただけ…
結果は、適当な symbol で始まる list を print して、呼んだ方が read してる。
load-path は呼ぶ時の値で設定して、 coding は binary で逃げた。
通信が print しか思い付かなかったし、あんまり凄い事はできなそう…


381 :デフォルトの名無しさん:02/10/10 02:36
ここもこれ実行してみる!
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))))))

382 :デフォルトの名無しさん:02/10/14 03:38
C-xh
C-uM-|
perl -pe 's/^/\t/g'
とかやってるんですけど、
これを一つ動作でやる関数はどうコーディングすればいいでしょうか?
Mx lines-to-perl<ENTER>
s/^/\t/g<ENTER>
みたいにしたいっす。

383 :デフォルトの名無しさん:02/10/14 08:59
>>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 とかを参照。

384 :デフォルトの名無しさん:02/10/15 09:16
あるelispをデバッグしたいのですが、どのようにすればいいでしょう。
例えば、現在カーソル付近にある文字列を読み取り外部スクリプトに
渡しているようなコマンドなのですが、
Symbol's value as variable is void:
というエラーがでますので、デバッグしたいのです。

385 :デフォルトの名無しさん:02/10/15 11:32
>>384 M-x toggle-debug-on-error


386 :デフォルトの名無しさん:02/10/15 12:14
>>384
あやしい関数の defun のとこで
edebug-defun する、とか。

387 :デフォルトの名無しさん:02/10/15 14:39
[質問]

(run-at-time 3 nil 'info)

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

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



388 :デフォルトの名無しさん:02/10/16 06:13
前の人の質問がまだ解決してないようですけど、簡単な質問させて下さい。
elispとLispとどの程度共通性がありますか。何か、大学でLispの授業が
あるんだけど、一応自分でかなりelispは作ってきたから、かなり共通な
らとってみようかと。

389 :デフォルトの名無しさん:02/10/16 20:46
その授業schemeじゃなくて?

390 :デフォルトの名無しさん:02/10/16 21:03
Common Lispで自然言語処理とかです。


391 :名無しさん@Emacs:02/10/16 22:02
かなり書いてきている人間のする質問じゃないぞ。
elispのマニュアルの最初の方読めよ。

392 :デフォルトの名無しさん:02/10/16 22:18
社会人だけど大学の授業で Lisp とか Scheme とかやるなら忍びこんで受けて
みたいな…

393 :デフォルトの名無しさん:02/10/16 22:26
1年生の夏休みの集中講義で今は亡き中西先生のLispの講義受けますた。
かたぎの人生を踏み外した気もしますが、後悔はしていません。

394 :デフォルトの名無しさん:02/10/18 19:25
講義って何やるの?

395 :デフォルトの名無しさん:02/11/03 15:25
age

396 :デフォルトの名無しさん:02/11/03 19:35
ウチの大学では scheme のインタプリタを scheme で作成とか
scheme のコンパイラを作成とかやりました。
でもこれは講義というより実習かな。

397 :デフォルトの名無しさん:02/11/03 20:54
(setq hoge (append '(x y) hoge))を
(macro hoge x y)ってできる
マクロとかってありますか?

398 :デフォルトの名無しさん:02/11/03 21:03
(defmacro foo (var &rest list)
`(setq ,var (append ',list ,var)))


399 :デフォルトの名無しさん:02/11/16 04:47
age


400 :デフォルトの名無しさん:02/11/20 16:06
hoshe

401 :デフォルトの名無しさん:02/11/22 15:37
hoshp?

402 :名無しさん@Emacs:02/11/22 16:37
t


403 :デフォルトの名無しさん:02/11/22 17:56
>>393 >>396 いいなー。漏れにもなにか講義してくれ。

404 :デフォルトの名無しさん:02/11/22 18:10
質問させて下さい。

(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 の形式になれないのか、混乱してばかりでして…

405 :デフォルトの名無しさん:02/11/22 18:19
>>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)))

406 :名無しさん@Emacs:02/11/22 18:19
(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 のとき
(= 再帰の終わり)で値を返しましょう.

407 :406:02/11/22 18:24
>>405 うぉ,ケコーン!!しかも漏れのがヘタレな解答をしてしまった….
そこで,ちょっと知恵を絞ってみた↓.
(defun foo (mlname)
(mapconcat (lambda (e) e) (split-string mlname "\\.") "-"))


408 :デフォルトの名無しさん:02/11/22 18:45
navi2ch をロードしてる時に使えりゃいいなら
(navi2ch-replace-string "\\." "-" mlname t)
でいいんじゃないの?


409 :デフォルトの名無しさん:02/11/22 19:14
"\\."ってなに?

410 :デフォルトの名無しさん:02/11/22 19:38
何が聞きたいんだ?バッックスラッシュが二つある理由か?
それとも正規表現としての意味か?

411 :デフォルトの名無しさん:02/11/22 19:45
>409
ただの文字列だけど。
\を2回書いているのは、本来のエスケープシーケンス文字の意味で
使われる\を、文字'\'そのものとして表すため。
(これはC言語の文字列と同じ)
文字列の内部表現は\.

さらに、この文字列はstring-matchへ正規表現文字列として
渡されるので、\はメタ文字に対するエスケープ文字と解釈される。
よって、string-matchにはただの文字ピリオド'.'を渡した事になる。

412 :デフォルトの名無しさん:02/11/22 19:51
先生!! M-x search-forward-regexp したときは \.で良いのは何故でつか!!


413 :デフォルトの名無しさん:02/11/22 19:53
エスケープすればいいだけだから

414 :デフォルトの名無しさん:02/11/22 20:04
おお!すばらしいです!
>>405-408 さん、どうもありがとうございます。特に >>407 には感動しました。
mapconcat なんてのがありましたか。

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

415 :404:02/11/22 20:04
>>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)

と、停止してしまいます。正規表現にピリオドを含めた事がおかしいのだと
思うのですが、[] 内にある場合は問題ないですよね?
それとも、ピリオドを含めた事で、予想外の範囲までひろってるという事でしょうか?

416 :デフォルトの名無しさん:02/11/22 20:06
>>413 それはちっと簡潔すぎやしないか.
Emacs に評価させる elisp コードは,Lisp パーサで解釈されてから
正規表現エンジンに渡されるので, Lisp パーサが文字列作る時に
\\ が二つ必要になる.それに対して,M-x で呼んだ時は Lisp パーサ
通らねぇで直に正規表現エンジンに渡るから \. で良いんだ.

417 :デフォルトの名無しさん:02/11/22 20:16
emacsの正規表現読みにくいね。
なんだっけ、here-documentって使えなかったっけ。

418 :デフォルトの名無しさん:02/11/22 20:18
文字列と一緒なのがよくない。

419 :デフォルトの名無しさん:02/11/22 20:26
つまようじ (・∀・)イイ!!

420 :デフォルトの名無しさん:02/11/22 23:06
>>417 re-builder ツカエ。これでも嫌ならしょーがねぇ python でもツカエ。

421 :デフォルトの名無しさん:02/11/23 00:02
>>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()
つーのを定義すればいいはず。 エラーは別の原因じゃない?

422 :デフォルトの名無しさん:02/11/23 00:21
http://www.mew.org/~kazu/doc/elisp/regexp.html

423 :デフォルトの名無しさん:02/11/23 00:41
>422 そこのハッシュの解説読んで Emacs21 にはハッシュがあるというの
を知りますた…

424 :デフォルトの名無しさん:02/11/23 01:34
正規表現を入力したらそれの文字列表現を返すようなのってないんですかね

まぁすぐ書けそうな気もしますが

425 :デフォルトの名無しさん:02/11/23 02:00
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."


426 :デフォルトの名無しさん:02/11/23 02:11
[a-z]+とかはどうするの? 無限にありますよ。


427 :デフォルトの名無しさん:02/11/23 04:47
( ´∀`)え?

428 :デフォルトの名無しさん:02/11/23 07:14
>>424
(prin1 (read-string "re: "))
みたいな感じてこと?

429 :デフォルトの名無しさん:02/11/23 10:49
>>421
うわー、まったくその通りでした。
関数名にはピリオドだめだと、勝手に決めつけてました。コロンが OK なの
は知ってましたが、ピリオドも通るんですね。

うまく動きました。ありがとうございます。

430 :デフォルトの名無しさん:02/11/23 10:59
>>424
regexp-quote か?

431 :424:02/11/23 23:38
(prin1 (read-string "re: ")) でだいたいやりたいことができました。
こんなのあったんですね。

432 :デフォルトの名無しさん:02/11/25 10:37
>>425
(string-to-int "1010" 2)
(string-to-int "ffff" 16) -> 65535
こんな事がやりたいのか?まぁ,#x とか #b とかの prefix 付きで
read しても良いわけだが….

433 :デフォルトの名無しさん:02/11/25 11:01
>>432
そうです。どうもありがとうございました。


434 :デフォルトの名無しさん:02/11/25 18:07
宿題を教えてほしいんですが…

(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))))を微分せよって問題です。

なんかうまく答えが出てくれなくて・・

435 :デフォルトの名無しさん:02/11/25 18:42
((eq (op e) 'sin) (make-prod (list 'cos e) (diff e))

436 :デフォルトの名無しさん:02/11/25 21:02
(if A B)
(when A B)
(and A B)
どれが好き?

437 :デフォルトの名無しさん:02/11/25 21:46
ifでお願いします。

438 :デフォルトの名無しさん:02/11/25 21:52
短いのなら if で、長いのなら when で…かな。
and でやるのはちょっと変則的な気がして、あんまり好きじゃない。

439 :デフォルトの名無しさん:02/11/25 21:59
(if A (progn B C)) は (when A B C)
(if A (if B C)) は (if (and A B) C)
で書くかな。
書いてる時の気分によるところが最も大きいような気もするけど。

440 :デフォルトの名無しさん:02/11/25 22:04
(and A B C)

441 :デフォルトの名無しさん:02/11/26 00:47
>>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)))))


442 :デフォルトの名無しさん:02/11/26 01:03
else 部が無いやつは when で書きたい。(if cond then) ってなんか嫌。
(if cond (prog A B C)) はすげー嫌。完全に個人的な趣味だが。

443 :434:02/11/26 02:20
。・゚・(ノД`)・゚・。

444 :デフォルトの名無しさん:02/11/26 11:25
((eq (op e) 'exp)
(make-product e (diff (arg1 e) a)))

445 :デフォルトの名無しさん:02/11/27 18:55
で,最近ネタ不足なわけだが,>>434 よ,調子はどーよ?

446 :デフォルトの名無しさん:02/11/27 19:30
return も break もないのが不便で仕方ありません。
何とかごまかす方法は無いでしょうか。

447 :名無しさん@カラアゲうまうま:02/11/27 19:38
returnとかreturn-fromとか。

448 :デフォルトの名無しさん:02/11/27 20:19
まずは catch throw で、cl はもっと後でもいいんじゃないかな。

449 :デフォルトの名無しさん:02/11/28 11:00
再帰で書け

450 :デフォルトの名無しさん:02/11/28 11:40
とあたり前の結論が出た所で、
(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 じゃねー気もするが。

451 :デフォルトの名無しさん:02/11/28 22:56
returnやbreakがないなんて言ってる椰子は
まずmacroを覚えれ

452 :デフォルトの名無しさん:02/11/30 01:11
ねた切れ sage

453 :デフォルトの名無しさん:02/12/04 17:21
ネタ振り.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----


454 :デフォルトの名無しさん:02/12/04 17:43
http://harukat.hp.infoseek.co.jp/lisphtml/about_lisphtml.html ?

455 :デフォルトの名無しさん:02/12/04 18:01
どうせなら AllegroServe 互換に汁 !!

456 :デフォルトの名無しさん:02/12/04 18:06
html→S式もできないと使い道無いよ

457 :453:02/12/09 18:44
>>454 そんなのがあったのか…知りませんでした。こーゆうのに合わせるべきか?
>>455 なにそれ?
>>456 すまぬ。漏れは「S 式だとインデントが楽」とか「ページ内の
H[1-5] タグを検索してインデックス作成」くらいしか考えてなかった。

つまらんネタを振って申し訳ない。逝ってきます。

458 :デフォルトの名無しさん:02/12/09 23:34
保守 age

459 :デフォルトの名無しさん:02/12/21 00:15
(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)
となってしまいます。

どうすれば良いですか?

460 :デフォルトの名無しさん:02/12/21 00:30
>>459
(mapcar #'car animals)


461 :デフォルトの名無しさん:02/12/21 00:44
>>460
function で quote してるのはなんで?

462 :459:02/12/21 01:00
>>460

ぐっ、勉強不足でした。
ありがとう。

463 :デフォルトの名無しさん:02/12/21 02:03
>>461
便乗質問、しつれいします。

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

これらはどう違うんでしょうか? (3番目と4番目は同じ?)
ふつーはどうすべきなんだろう?


464 :デフォルトの名無しさん:02/12/21 02:23
>>463
2番目以外は全部同じ。バイトコンパイルしないなら2番目も同じ。
普段は1番目でいいんじゃない?

465 :デフォルトの名無しさん:02/12/21 02:44
わーぉ、
lambda → (function (lambda ...

マクロだった・・・



466 :デフォルトの名無しさん:02/12/21 22:25
((lambda (x) (* x x)) 10)
('(lambda (x) (* x x)) 10)
(#'(lambda (x) (* x x)) 10)
((function (lambda (x) (* x x))) 10)


467 :デフォルトの名無しさん:02/12/22 02:15
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\\"" とかやってみましたが
上手くいきませんでした。

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

> これだと
> $> c:/usr/local/bin/foo.exe hoge hage
> になってしまいますよね
> $> c:/usr/local/bin/foo.exe "hoge hage"
> にしたいんです。
この辺からして違ってそうなので、本当に期待している動作からして怪しいが。
#本当にそういうシェルだったら御免ね。

469 :デフォルトの名無しさん:02/12/22 13:50
>>468
>前者で渡るはず。
>上手くいかないのはfoo.exeのせいじゃないのかな?
やっぱ、ダメでした。

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




470 :デフォルトの名無しさん:02/12/22 15:50
ファイルのパスの空白とか渡す時にそーゆうことするわな。
本当に期待どーりに動いてるか edebug で調べてみれ。

471 :デフォルトの名無しさん:02/12/22 16:52
>>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"
と指定は出来無そうだ。

お騒がせしました。

472 :468:02/12/22 18:21
>>467,471
とりあえずこれが間違ってるな。
> call-process で起動するprocessの引数にダブルクォーテーションも
> 含めて文字列を渡したい時どうすればよいですか?
含めたいのは引用符じゃなくて空白なわけね。

473 :デフォルトの名無しさん:02/12/22 19:11
>>472
いいえ、
スペースを含んだ文字列を引用符で囲ったものを
引数に指定したいんです。

474 :デフォルトの名無しさん:02/12/22 19:27
>>473
スペースを含んでる文字列は引用符で囲って渡されるんじゃないの。


475 :デフォルトの名無しさん:02/12/22 20:59
>>471
> c:/usr/local/foo.exe /t hoge.txt "bar boo"
> と指定は出来無そうだ。
え?何でできないの?

476 :デフォルトの名無しさん:02/12/22 21:55
(call-process "c:/usr/local/bin/foo.exe"
nil nil nil "hoge hage")

でいいんじゃないの?
確かスペースがどうのとか考えなくてもよかった気がする

477 :デフォルトの名無しさん:02/12/23 00:34
>>474
>>475
>>476
IMEパッチでは、argument editting拡張されていて
引数の渡し方が、色々操作できるんです。
(mw32misc.el参照)

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

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

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

#板違いかな

478 :デフォルトの名無しさん:03/01/09 01:16
ifでお願いします。

479 :デフォルトの名無しさん:03/01/09 01:23


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

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

無 視 し と け

480 :デフォルトの名無しさん:03/01/09 01:27
無理
もともとかなりのヘタレだから

481 :IP記録実験:03/01/09 01:38
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を提出することがある。

482 :デフォルトの名無しさん:03/01/09 01:46
記念真紀子たん(゚∀゚)

483 :デフォルトの名無しさん:03/01/09 01:57
言 い た い こ と も 
      言 え な い こ ん な イ ン タ ー ネ ッ ト じ ゃ

484 :デフォルトの名無しさん:03/01/09 02:54
暴力団に殺人依頼した。管理人を入廷時に射殺する

485 :デフォルトの名無しさん:03/01/09 18:31
======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
────────────────────────────

486 :デフォルトの名無しさん:03/01/10 00:17
>>158
同意だね。
リスクなんか気にするような奴は負け犬だね。

487 :デフォルトの名無しさん:03/01/10 09:05
>>551
「コテハン戦隊ラウンジャー」に鑑定依頼してきますた

488 :デフォルトの名無しさん:03/01/10 10:26
釣りのセンスないからやめたほうがいいすよ>>182

つまらないので寝ます。

489 :デフォルトの名無しさん:03/01/10 11:03
この人じゃないの?
http://ooo.2ch.net/jikken/kako/1027/10275/1027521762.html


490 :デフォルトの名無しさん:03/01/10 11:34


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


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

A♂の異質排除×O♀の冷酷=差別・いじめ とあいなる。

491 :デフォルトの名無しさん:03/01/10 12:22
>>463
電2とは何かな?

492 :デフォルトの名無しさん:03/01/10 12:49
たしかに2ちゃんでは知るかボケとか逝ってよしとかハァ?とか一言レス
で書いたりするが、それはIPが取られてないからじゃない

493 :デフォルトの名無しさん:03/01/10 13:46
Z武スレももう終わりか

494 :デフォルトの名無しさん:03/01/10 14:50
保守

495 :デフォルトの名無しさん:03/01/10 14:53
《一覧表》

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

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

住人じゃない人も知っている事を書き込んで、楽しいでふか?粘着くん。

496 :デフォルトの名無しさん:03/01/10 16:21
串揚げ

497 :デフォルトの名無しさん:03/01/10 22:46
ただ内部告発的なカキコも減ってしまう気もするんだが・・・

498 :デフォルトの名無しさん:03/01/10 22:53
>>722
今のうちに親戚回りしておきな。

499 :デフォルトの名無しさん:03/01/11 00:10
今回の件で言論の自由さえも脅かされることになるかも
誰も何も言えない時代が来そうな伊予柑

500 :デフォルトの名無しさん:03/01/11 00:18
匿名掲示板の意味を履き違えてる人が多くて萎える。

501 :デフォルトの名無しさん:03/01/11 09:41
では、お言葉に甘えまして。

削除系の板は今までも(恐らくリモホ表示以前から)
SETTING.TXTの設定でIPを記録していましたが、何か?

502 :デフォルトの名無しさん:03/01/11 09:43
これはイヤですね

503 :デフォルトの名無しさん:03/01/11 10:01
すいません、emacs-18.55.1使ってるんですけど、
encode-timeやらdecode-timeやらがありません。
この環境で、現在日付を求める関数とかって作れますか?
いや、標準で入ってるcalendarとかは、ちゃんと表示できてるわけで、
スキルさえあればできるんでしょうけど、
ソース見ても全然分かりませんでした。。

504 :503:03/01/11 10:11
ああ、ちょっと18にも(current-time-string)っていう関数があるんですね。
これの部分文字列使えば日付とか使えそうです。…

505 :デフォルトの名無しさん:03/01/11 10:15
======2==C==H======================================================

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

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

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

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

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

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────

506 :デフォルトの名無しさん:03/01/11 10:48
やべえ。俺は消されちまう。
怖いのは警察ではないぞ。

507 :デフォルトの名無しさん:03/01/11 11:09
何でここに貼るのか分からん

508 :デフォルトの名無しさん:03/01/11 11:16
とりあえず、最速1,000祭りデモするか・・・・

509 :デフォルトの名無しさん:03/01/11 12:15
lispでファイルテストってどうやってやるんでしょう?
perlとかだと「-e ファイル名」とかって調べられるんですけど。
そのファイルが既に存在しているかどうか、を調べたいんです。

510 :デフォルトの名無しさん:03/01/11 12:16

>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

これまでのあらすじは あたりに誰かお願い。


511 :デフォルトの名無しさん:03/01/11 12:48
まさか、ポリタンが立てるとは…


                   ちょっと面白いので好。

512 :デフォルトの名無しさん:03/01/11 12:52
>>509
file-exists-p ってえのがあるけど。

513 :509:03/01/11 12:56
>>512
それだ。それでした。やってみたら大当たりッス。
サンクスコ。ありがとう。

514 :デフォルトの名無しさん:03/01/11 23:48
sports3鯖死んでる??
国内サッカー板が見れない…

515 :デフォルトの名無しさん:03/01/11 23:57
ていうか、ここでどーこー言ってる連中は、他を見たり書き込んだりせんのかw

516 :デフォルトの名無しさん:03/01/12 02:36

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

 

517 :デフォルトの名無しさん:03/01/12 02:41
いや、俺のIP記録してもいいけど字汚いから読めないかもよ。

518 :デフォルトの名無しさん:03/01/12 10:08
今日なんにも知らない友達に
2ちゃんねるって知ってる?
とか聞かれた。絶対テレビの影響で人増えるな・・・

519 :デフォルトの名無しさん:03/01/12 10:11
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

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

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。


520 :ふわふわ名無しさん:03/01/12 12:45
>>509
Emacs Lisp なら file-exists-p 。
Common Lisp だったら probe-file だったかな。


521 :デフォルトの名無しさん:03/01/12 20:54
岡田克彦ファンクラブからのご案内です。岡田克彦氏の卒業した早稲田大学
政治経済学部に比べて著しい低学歴、特に、ひろゆきの卒業した中央大学文学部
のようなヘボい大学に共通しているのは、文化水準が低いという事です。18歳から22歳を
ヘボい大学で過ごすということは、致命傷と言えます。2ちゃんねらーの大半は
岡田克彦氏に比べて、著しい低学歴ですから、取り返しはつかないのです。
せめて、http://www.geocities.co.jp/MusicHall-Horn/1091/で、氏の作品に触れましょう。


522 :デフォルトの名無しさん:03/01/12 20:57
Internet Service Providerが契約者に対し
顧客情報の開示を行うことを明らかにするだけだ。
責任は書き込んだ奴が取るだけ。

523 :デフォルトの名無しさん:03/01/12 21:06
最近カール★さん見ない・・・

524 :山崎渉:03/01/13 18:43
(^^)

525 :デフォルトの名無しさん:03/01/13 22:44
法律>>>>>>>>>>>>>超えられない壁>>>>>>>>>>>ローカルルール

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




526 :デフォルトの名無しさん:03/01/14 18:37
なぁ、ちょっと確認したいんだが、ここはemacs-lispのスレだよな?

527 :デフォルトの名無しさん:03/01/14 19:05
>>526
詳細は自治スレへ

528 :デフォルトの名無しさん:03/01/14 19:14
>>526
はい。

529 :デフォルトの名無しさん:03/01/14 23:02
「LISPの計算量評価はCONSの回数を問題とする」
って聞いたんだけど、何で?わからんのだけど。

これを読め!
っての知ってたら示してくれると嬉しいです。
教えてくんでスマソ

530 :デフォルトの名無しさん:03/01/15 03:36
>>529
あのさ、「何で?」どころじゃなくて、
意味がつかめないんだけど。
質問の仕方ってのがあるだろ。

531 :山崎渉:03/01/15 17:46
(^^)

532 :山崎渉:03/01/23 22:24
(^^)

533 :デフォルトの名無しさん:03/01/29 07:56
age

534 :デフォルトの名無しさん:03/01/30 02:31
>>529 ものすごく今更だが、cons すると cons セルを消費するので cons 回数を
気にするんだYO!! だから cons セルを節約するために破壊的操作 nconc, nreverse
なんてのがあるんだYO!! しかし、優秀な gc (ACL とか)を持ってる処理系なら
破壊的操作なんてしないでバリバリ cons しまくるのが真の漢。


535 :デフォルトの名無しさん:03/01/30 18:20
32ビット整数を扱うためのEmacs Lispパッケージってないですか?
(let ((now (current-time)))
(+ (ash (car now) 16) (car (cdr now))))
なんてのを書いてて、整数が28ビットなのに気がつきました。
とりあえず四則演算、大小比較と、文字列との相互変換ができれば
幸せなんですが。


536 :デフォルトの名無しさん:03/02/02 01:21
>535
ちょっと調べて、bignum.elとか気の利いたパッケージがあると
思ったけど整数(28bit)と浮動小数点数しかないみたいね。
http://list-archive.xemacs.org/xemacs-beta/200105/msg00205.html
こういうモジュール組みこむしかないのかな。


537 :デフォルトの名無しさん:03/02/02 02:17
今さらながら cl のマクロ使ってみた。
flet とか dolist とか、すごいね。便利。
他に dotimes、lexical-let、case、push、pop
ぐらいしかみてないんだけど、おすすめマクロ
とかあったら、おせーて下さい。


538 :535:03/02/02 07:25
>>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))))


539 :デフォルトの名無しさん:03/02/05 22:35
>>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)

540 :デフォルトの名無しさん:03/02/19 17:10
((1 2 3) (4 5 6))

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

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

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



541 :デフォルトの名無しさん:03/02/19 17:24
>>540
こう?

(setq list '((1 2 3) (4 5 6)))
(mapcar (lambda (x)
(mapcar '1+ x))
list)


542 :デフォルトの名無しさん:03/02/19 18:46
(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))

543 :デフォルトの名無しさん:03/02/19 21:29
(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)))))))))


544 :デフォルトの名無しさん:03/02/19 22:09
emacs-lisp-mode, lisp-mode, scheme-mode などで、
括弧の色を変えるにはどうしたらいいでしょう?
ちょいと薄めの色にしたい。


545 :デフォルトの名無しさん:03/02/19 22:22
customize

546 :デフォルトの名無しさん:03/02/19 22:44
(defun hoge (l)
(cond ((null l) nil)
((integerp l) (1+ l))
((listp l) (cons (hoge (car l)) (hoge (cdr l))))))

547 :デフォルトの名無しさん:03/02/24 13:11
>>544
http://namazu.org/~satoru/programming/permstr.html#pale-parens


548 :デフォルトの名無しさん:03/02/24 15:59
547 ソレイイ アリガトウ


549 :名無しさん@XEmacs:03/02/25 23:01
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
したのに、その関数が呼ばれたときになにもおこらん。



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



*:□

551 :デフォルトの名無しさん:03/03/01 03:36
↓これと同じことをする関数って何でしたっけ?
(buffer-substring-no-properties
(save-excursion (beginning-of-line) (point)) (point))


552 :デフォルトの名無しさん:03/03/02 11:28
(´-`).。oO( >>551 は point-at-bol のことを言っているのだろうか?)


553 :551:03/03/02 18:30
>>552
どうもありがとうございます。
本当はカレント行の文字列をゲットするつもりで書いたのですが、
書き間違ってました...。
(buffer-substring-no-properties (point-at-bol) (point-at-eol))
で実現できますけど、他にありませんでしたっけ?


554 :デフォルトの名無しさん:03/03/02 19:07
>>553
それでいいんでないの?
Emacs20 だと point-at-bol, -eol がないから
>>551 みたいにしなくちゃいかんが。

555 :551:03/03/02 23:15
>>554
そうだったんですか。勉強になります。


556 :デフォルトの名無しさん:03/03/03 00:00
>>554
line-{beginning,end}-position

557 :デフォルトの名無しさん:03/03/18 23:34
一般的に mapcar()と while()はどちらが高速ですか?


558 :デフォルトの名無しさん:03/03/18 23:45
while


559 :デフォルトの名無しさん:03/03/19 00:40
mapcar

560 :デフォルトの名無しさん:03/03/19 02:16
which


561 :デフォルトの名無しさん:03/03/19 02:36
mapc


562 :デフォルトの名無しさん:03/03/19 02:48
who


563 :デフォルトの名無しさん:03/03/19 04:16
why?


564 :デフォルトの名無しさん:03/03/19 05:50
whoops!

565 :デフォルトの名無しさん:03/03/19 10:01
(w

566 :デフォルトの名無しさん:03/03/19 16:18
おまえら、イイ加減にしる。

567 :名無しさん@Emacs:03/03/22 13:50
うん、イイ加減だな。

568 :デフォルトの名無しさん:03/03/23 22:08
mapcarはリスト作るから遅いんじゃないの

569 :デフォルトの名無しさん:03/03/23 22:17
schemeでいうfor-eachが欲しいな。

570 :デフォルトの名無しさん:03/03/24 06:54
mapc は emacs21 では built-in になったけど、
emacs20 や xemacs では cl だから、今のところ特にメリット無いな。

>>503
18.55 だなんて、かなりレアそうだな。
比較的メジャー(?)な nemacs でも 18.59 だから。

571 :デフォルトの名無しさん:03/03/25 11:07
とりあえず末尾再帰をなんとかしてくれ

572 :デフォルトの名無しさん:03/03/25 14:48
ほんと、末尾再帰最適化してくれると、いろいろ書きやすくなりそうなんだけど…
byte-opt.el あたりには、 dynamic binding だと苦しい、って書いてあるね…
(lexical-scope) とかの form を導入する idea も書いてあるけど、実現されてないみたいだし…


573 :デフォルトの名無しさん:03/03/27 16:44
dynamic bindingだと、末尾再帰の展開って難しいの?
bytecode.cのソース読んでみたけど、よくわからなかった

574 :デフォルトの名無しさん:03/03/27 21:19
正確には「末尾呼び出し」だから dynamic bind だろうが関係無いと思うんだが

575 :デフォルトの名無しさん:03/03/27 21:52
tail-call の時に dynamic binding stack が成長し続けちゃうのね。

576 :デフォルトの名無しさん:03/03/27 23:52
なるほど、そういうことか
elisp イラネ

577 :デフォルトの名無しさん:03/03/28 03:23
tail-call のときって、 symbol の中身はもう参照されないってことは保証できそうな気がする。
そういう symbol に印つけて、印があったら stack に積まずに破壊的に代入する…とかってできるのかな。
…そういう処理してたら、普通の関数は今より遅くなるだろうけど。

やっぱり、 lexical scoping の宣言とか使って最適化できるほうがいいんだろうな…

578 :デフォルトの名無しさん:03/03/28 03:56
> tail-call のときって、 symbol の中身はもう参照されないってことは保証できそうな気がする。

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

やっぱり lexical scoping で multi thread な emacs 希望。

579 :デフォルトの名無しさん:03/03/28 20:06
(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 差し換えとかで対応できるかな。

580 :デフォルトの名無しさん:03/03/28 22:08
末尾呼び出しだと、戻る必要が無いんだから dynamic binding を
その時点での stack に上乗せするのではなく、
その時点での stack を全部一つの環境に押し込んで一つにして、
その後は、その上に積んでけばよいのでわ?

581 :デフォルトの名無しさん:03/03/29 18:53
いまいち問題が理解できないや。

(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だと、どういう問題が出るの?

582 :デフォルトの名無しさん:03/03/29 19:54
>581
その場合は関係無い

583 :デフォルトの名無しさん:03/03/29 20:11
(let ((a b)) (f))でfのなかでaを評価する時が問題になるんだよね?

584 :デフォルトの名無しさん:03/03/29 20:21
最近 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 では上記のような現象は起こりません。

585 :デフォルトの名無しさん:03/03/29 20:26
>584
それこそ dynamic binding の長所であり短所

586 :584:03/03/29 21:07
Common Lisp も Emacs Lisp も dynamic binding ですよね?
でも、 >>584 のコードを Common Lisp (ACL) で実行すると期待通り
に動作します。Emacs Lisp と Common Lisp の無名関数(lambda)内の
binding の仕方が違うということでしょうか。

となると Emacs Lisp では高階関数をまともに使えないような気が
しますが、そういうもんなのでしょうか?

587 :デフォルトの名無しさん:03/03/30 08:12
>>586
Common Lisp は lexical scoping だったと思うけどな。
elisp には Common Lisp っぽいことのための cl っていう package があって…
その中に lexical-let っていう、そんなときのための macro があるし。

無名関数に限らず、関数内での symbol の bind のされかたが違うの。
だから、外部から参照する symbol は、名前が被らないように気をつけなきゃいけない。
my-bar-func みたいに、 package 名で prefix したり、少し説明的な名前にしたり。
それが >>585 も云ってる、 dynamic binding の短所。

588 :デフォルトの名無しさん:03/03/30 08:45
>>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 に積まれてっちゃう、っていう。

589 :デフォルトの名無しさん:03/03/30 09:39
>>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"))


590 :デフォルトの名無しさん:03/03/30 10:15
>>589
それがdynamic(ry
ここで色々書くより
http://www.gnu.org/manual/elisp-manual-21-2.8/html_node/elisp_147.html
理解できるまでこのセクションを何度でも読み直すのがはやいと思われ。

591 :デフォルトの名無しさん:03/03/30 10:38
>>590
どもです。
ちょっと勉強してきます。

592 :デフォルトの名無しさん:03/03/30 15:40
>>589
あ…ごめん、もちろん let 有効範囲内。再帰してる間の話。
>>588 の関数で再帰してくと、 call stack の他に binding stack もあふれる、っていう例。

# …でも (foo 3) は (3 2 1 0) じゃなくて (0 1 2 3) 、と重箱の隅をつついてみる。

593 :584:03/03/31 18:09
>>590
ありがとうございました。
「Emacs Lisp does not have closures.」
ということで理解できました。

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

> (consp #'(lambda () (print "bar") (funcall func)))
t

594 :デフォルトの名無しさん:03/03/31 22:34
>>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

595 :デフォルトの名無しさん:03/04/01 05:03
(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


596 :デフォルトの名無しさん:03/04/01 08:51
もう一回 stack ネタに戻ってみていいかな…うざかったらごめん。

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

関数末尾の let とかを特別視して、 tail-call のときにそういう binding をまとめられる binding として記憶しとくことと、
末尾の binding 作るときにまとめられる binding があるかどうか確認して、あればまとめることが必要になるけど。

597 :デフォルトの名無しさん:03/04/01 09:31
>>596
関数も動的スコープなので
(defun bar ()
(defun foo () 'x))

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

(foo)
x
となるです。つまり、呼び出す関数セルに何が入ってるかは実行時まで
わからないので、束縛をまとめるのは難しいんじゃないかと。

598 :デフォルトの名無しさん:03/04/01 10:40
>>597
それは top level environment であって、関数の動的スコープとは関係ないのでは。

599 :デフォルトの名無しさん:03/04/02 00:41
>597
・ Top Level からの呼び出しは常に末尾ではない
・ 束縛をまとめるのが可能なのは末尾呼び出しの場合のみ

600 :デフォルトの名無しさん:03/04/02 03:48
>>597
確かに compiler だけで実行前に最適化するのは難しいと思う。
interpreter に直接 stack 書き換えてもらう、って感じで考えてた。

compile の時点だと、末尾で呼び出しや束縛があることまではわかるよね。
compile した関数だけ最適化されればいいなら、これに専用の byte-opcode とか割り当てればいいのかも。
普通の束縛や呼び出しの代わりにそっちを使ったときだけ、 interpreter が stack 書き換えてくれるの。
これだと、それ以外の関数の実行への悪影響は、そんなに大きくならないかも。

601 :デフォルトの名無しさん:03/04/02 14:52
replにコンパイラ仕込むとか

602 :デフォルトの名無しさん:03/04/04 23:53
↓こういう関数ってデフォルトでありますか?
(??? "\"aaa\\\\bbb\\\\ccc\"")
=> "aaa\\bbb\\ccc"


603 :デフォルトの名無しさん:03/04/05 00:33
(read "\"aaa\\\\bbb\\\\ccc\"")
=> "aaa\\bbb\\ccc"


604 :602:03/04/05 00:41
>>603
サンクス!


605 :デフォルトの名無しさん:03/04/06 19:18
emacs-lispにhere documentて無いですか?
#<<EOH

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

EOH
=>"\nemacs-lispにhere documentて無いですか?\n\n"

606 :山崎渉:03/04/17 15:42
(^^)

607 :山崎渉:03/04/20 04:22
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

608 :デフォルトの名無しさん:03/04/25 17:31
ホシュ

609 :デフォルトの名無しさん:03/05/23 02:53
バッファ編集後にアクティブマークを再設定するにはどうしたらいいんでしょう?
(transient-mark-mode t)の状態で、バッファを編集(リージョン各行頭に文字挿入など)し、繰り返し編集できるようにアクティブマークを再設定したいんですが、どうやっても色付き部分が消えてしまいます。
pc-select.elを参考にしてみたんですが、あれは編集が発生しないのでマークが消えないようなのです。


610 :デフォルトの名無しさん:03/05/23 13:40
>>609 C-x C-x


611 :名無しさん@お腹いっぱい。:03/05/23 14:38
ほうらわかりづらい日本語を使うとはずした答えが出てくるだろ

612 :デフォルトの名無しさん:03/05/23 18:17
たぶんここよりUNIX板のemacsスレで聞いた方が的確な答えが貰えると思う。
じゃあこのスレはなんなのかというと・・・

613 :名無しさん@お腹いっぱい。:03/05/23 19:01
ミニバッファで 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 した時に止まる場所になったらそれ以上は文字削除しないようにしたいのですが
どの部分でどのようにチェックをかけたら良いでしょうか?

614 :デフォルトの名無しさん:03/05/23 19:34
(゚Д゚)bolp

615 :613:03/05/23 19:42
614さん、どうもです。

Find file: ~/elisp
とした場合、C-a は ~ の位置で止まるのですが
ここでは (bolp) は nil とされてしまい、
F の位置でのみ t と判断されるようです…。

616 :デフォルトの名無しさん:03/05/23 19:43
614はまちがい。
1字ずつ消すんでなくて、スラッシュを検索して一気に消す方がよさそうな気も。

617 :613:03/05/23 20:03
うーん。どのように書けばいいか…。
へたれですいません。

618 :名無しさん@お腹いっぱい。:03/05/23 21:07
>>609
別解だが、narrow-to-region して編集するのが Emacs のお作法
>>617
backward-kill-word でも使っとけ


619 :デフォルトの名無しさん:03/05/24 01:38
>>618
うーん、せっかくヒントを貰っているようなんですが解りません。
narrow-to-regionで隠せばバッファを編集しても
deactivate-markを免れるのかと思いきやうまくいかず。


620 :デフォルトの名無しさん:03/05/24 03:32
コマンドを実行した後に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ってどこかに
ないですか。


621 :デフォルトの名無しさん:03/05/24 06:17
>>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)))))

622 :613:03/05/24 09:05
621さん、ありがとうございます!
最後の行を以下のようにして期待通りの動きになりました。

(delete-region (line-beginning-position) pos))
(insert "/"))))

623 :Lisp 1.5:03/05/24 11:26
>>600
言語仕様をレキシカルスコープにすればそんなことはやらなくてすむ。ただし、
buffer localな変数がないのはきついので、"環境"について拡張が必要になる。

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

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



624 :名無しさん@お腹いっぱい。:03/05/24 22:53
>>620
> ところでnarrow-regionしている間mode lineに何か表示するelispってどこかに
> ないですか。
%n じゃ不満?

625 :620:03/05/25 03:30
>>624
%n が何のことかよくわからないです。
……とmode-line-formatを見ると、ああ、なるほど。了解しました。
ありがとうございます。好みに合うよういじってみます。


626 :デフォルトの名無しさん:03/05/25 09:01
>>623
全部 lexical にすると、かなり非互換な package が出そう…
global variable を default argument みたいに使って、適宣 let するっていう使いかた、手軽でいいし…
そういうののために fluid-let とか用意すると、そっちで同じ問題が出るだろうし。

環境のほうは、もうちょっと好きにいじれたら…って思う。
buffer 以外にも、いろんな状態に応じた local の環境作れたりすると楽しそう…

627 :デフォルトの名無しさん:03/05/26 00:45
>>620
うおお、感謝です。
ばっちりいけました。

628 :山崎渉:03/05/28 12:50
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

629 :デフォルトの名無しさん:03/06/03 20:47
とりあえず末尾再帰をなんとかしてくれ

630 :デフォルトの名無しさん:03/06/09 10:56
保守sage

631 :デフォルトの名無しさん:03/06/20 20:11
まぁ、ぼちぼちって感じ?

632 :名無しさん@Emacs:03/07/02 21:39
Cygwin&XEmacs

633 :デフォルトの名無しさん:03/07/06 00:39
shell-command() の後に、何か処理をしてから終了する関数があるとします。
(defun hogehoge ()
(let ((command))
(setq command (read-from-minibuffer "% "))
(shell-command command)
;; 後処理
))
ミニバッファにいる時に C-g した時は shell-command() を実行しないで
後処理だけやらせたいのですが、どのようにすればよいのでしょうか?


634 :名無しさん@お腹いっぱい。:03/07/06 12:13
>>633
condition-case


635 :633:03/07/06 13:32
>>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)))))


636 :633:03/07/07 01:54
たびたびすみません。
8進数 600 か 文字列 "600" を 10進数 384 にすることは可能でしょうか?
GNU-Emacs21.3 だと (read (concat "?\\" "600")) で一応出来ましたが、
XEmacs21.4.9 だと ↑これやると落ちてしまいます。


637 :デフォルトの名無しさん:03/07/07 10:00
愚直な例
(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))

638 :デフォルトの名無しさん:03/07/07 11:40
>>636
string-to-number() で第2引き数を指定。

639 :デフォルトの名無しさん:03/07/07 21:50
>>637,638
どうもありがとうございました。


640 :デフォルトの名無しさん:03/07/10 23:55

たまに見かける、

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

とかの
(:hogehoge value :hagehage val)

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

おしえてけろ。

641 :デフォルトの名無しさん:03/07/11 05:45
キーワード引数

642 :名無しさん@Meadow:03/07/12 20:28
>>100
でも、「変態配置」を覚えとかないと、結局どこかで不便になる予感。
半日コーディングしてたら慣れたよ。慣れると便利だしね。

643 :デフォルトの名無しさん:03/07/13 03:08
カーソルキーにkeyboard-translateを掛けるにはどうしたら良いんでしょう?
というか、キーコード番号ってどうやったら調べられるんですか?
Sigmarion3でEmacsCEを使ってるんですが、「/」の位置に[up]があるので
SKKユーザのおれには激しく辛いのです。

644 :デフォルトの名無しさん:03/07/14 10:22
例えば、正規表現 "^[0-2]$" に当てはまる文字列は
"0" "1" "2" ですが、この展開をしてくれる関数ってありますか?


645 :Lisp 1.5:03/07/14 10:48
EmacsCEでは、
(keyboard-translate 'up ?/)
が効きますかね?



646 :デフォルトの名無しさん:03/07/14 17:41
>>644
"a*" とかは何を返せばよろしいの?
"" "a" "aa" ...
こんなの?


647 :デフォルトの名無しさん:03/07/14 20:04
>>646
はい。無限個の文字列の集合を得たいのです。

648 :デフォルトの名無しさん:03/07/14 20:43
>>647
無限個の文字列を得るためには無限のリソースが必要
無限個の文字列を表現するには無限のリソースは必要ない

649 :デフォルトの名無しさん:03/07/14 22:05
>>647は別人の釣りに決まってるでしょ

ちなみに遅延ストリームを使えば無限の文字列を有限のリソースで扱える。
ダイナミックスコープでは制約もありそうだけど。


650 :644:03/07/14 22:19
>>647
なんか違う人が答えてる...。
そう思って "^" と "$" で括ったのですが、無理がありましたかね。
基本的に、展開したい正規表現は "^\\(hoge\\|huga\\)hoehoe$"
といった書式だと決まっているので、自分で作ればいいのかな...。
無限の文字列になる場合は、エラーを返すようにするとか。


651 :643:03/07/15 01:15
>>645
EmacsCEでも動きませんし、Emacs 20や21でも動きませんでした。
「'up」が整数と評価できないようですね。

652 :デフォルトの名無しさん:03/07/15 02:17
>>649
遅延ストリームは無限個の表現であって無限個そのものではない

653 :Lisp 1.5:03/07/15 03:16
>>651
ああ、Emacsって未だに文字は整数だったね。
keyboard-translateでも整数しか扱えないや。

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

654 :山崎 渉:03/07/15 09:46

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

655 :643:03/07/18 01:47
>>653
できました。
(vector 'up)ができるじゃないですか。
どっかに無変換キーの割り当て方法があったはず…とか思ったらSKKのInfoでした。


656 :山崎 渉:03/08/02 02:58
(^^)

657 :デフォルトの名無しさん:03/08/06 15:41
sql-modeで500行しか表示されない(前の方が
消えていく)のですが、これはどこで設定できる
でしょうか?

658 :657:03/08/06 15:41
すれ違いスマソ。


659 :デフォルトの名無しさん:03/08/06 20:08
文字列の置換に関してなんですけど。

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

テンポラリなバッファ作って置換後に変数にコピー・・・てやらんとダメなん
でしょうか?


660 :デフォルトの名無しさん:03/08/06 20:51
>>659
replace-regexp-in-string (emacs21)
replace-in-string (xemacs)
って事?

661 :デフォルトの名無しさん:03/08/06 21:03
>>660
ををを!ありがとうございます。

meadow2なのに GNU Emacs 20.3版のElisp リファレンスを見てました。
やっぱし apropos すべきでした。すんません。

662 :デフォルトの名無しさん:03/08/14 00:42
すみません。質問させてください。
emacsを一生使い続けるつもりで、elispを覚えたいのですが、
良質サイト、良書、などありましたらお願いします。
又、Lisp, CommonLisp, Emacs Lisp の違いというのは何でしょうか?


663 :デフォルトの名無しさん:03/08/14 15:32
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 とか)


664 :デフォルトの名無しさん:03/08/15 01:23
ダイナミックスコープなのは、エディタ環境として見ればメリットも多いのでは?

665 :デフォルトの名無しさん:03/08/15 01:41
>>664
動的スコープの利便性を活かす場面は、そう頻繁には現れない。
なにより最適化が難しい。
バイトコードコンパイラが末尾再帰の展開をしない原因でもある。
独自LISPは変わらずとも、バインディング規則の変換ツールを作って、
本体はさっさと静的スコープに移行しちゃった方がいいと思う。
EmacsLispのメンテナ自身が、もう動的スコープは嫌だとゲロってます。

それと、まともな整数型は欲しいね。関連してFFIが無いのも痛い。
いまだにWindowsのDLLやUNIX系のsoの様な外部モジュール関数が使えない。
タグに8bitも使ってるんだから、新しい型を定義するのは困難でも無い気がする。
RMSは何を考えているのか。どういうわけかFFIを嫌ってるらしいけど。

666 :デフォルトの名無しさん:03/08/15 06:31
>>665
静的だと、最適化しやすいぶん、いじりにくくなると思う。

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

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


いっそ、 FFI 導入して、 guile も標準でつけちゃうとか…

667 :デフォルトの名無しさん:03/08/15 10:45
FFIを実装するパッチを公開→うまい使い方を提示→世間に広め既成事実化→RMS折れる
とはならんか?


668 :デフォルトの名無しさん:03/08/15 10:47
↑ muleみたいに


669 :デフォルトの名無しさん:03/08/15 11:32
>>666
Common Lisp みたいにスペシャル変数にして (let ((*fill-colum* 80)) ...) でいいじゃないか.
個人的には CommonLisp キボンヌなんだが,rms は CommonLisp が好きじゃないらしいからなぁ…

670 :山崎 渉:03/08/15 15:29
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

671 :デフォルトの名無しさん:03/08/15 18:43
動的スコープはfluid-letで代用できるんじゃないの?

672 :デフォルトの名無しさん:03/08/15 18:43
ageておこう

673 :デフォルトの名無しさん:03/08/16 00:46
うむ。ageておこう。


674 :デフォルトの名無しさん:03/08/16 05:20
Common Lisp はよく知らないけど…
動的な束縛が共存できるなら、そんなに困らないかも。
基本的に静的で、 defvar したのは動的とか。

675 :デフォルトの名無しさん:03/08/18 04:50
>>671

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

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

(defun bar ()
(+ x y))

(foo)
3

あとグローバルと fluid-let の間のスコープに同名の変数があるとそっち見ない?
これは組んだ奴が悪いのか…

676 :CL 派:03/08/18 13:42
Common Lisp はできるぞぅ.

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

(defun g () (print msg))


677 :デフォルトの名無しさん:03/08/18 14:16
hook を利用してゴニョゴニョってな事が
しづらくなるケースもあるかも?

167 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)