1 名前:おっす [03/09/18 19:29] なんとなくEmacs 触り始めて、なんとなくelispにも手を出して しまったアナタ。 なんとなく書いてしまったコードをココに書き込んで叩かれましょう。 タタカレテツヨクナレ。 年季の入った玄人衆は、もしアドバイスできたらお願いします。 いや、叩きついでにでも。 とりあえず入門書は ttp://www.netfort.gr.jp/~kiyoka/emacs_setq/emacs_setq.html ttp://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp.html リファレンスマニュアルは(ちと古い) ttp://www.fan.gr.jp/~ring/doc/elisp-manual/elisp.html とか、新しいのは(でも英語) ttp://www.delorie.com/gnu/docs/elisp-manual-21/elisp.html ではひとつ、コード中心の熱いバトルをよろぴく。
108 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/24 20:33] 2章を頭からちょっと読んでみたが - nil を偽値として紹介した直後に not でなく null を紹介。 その後で空リスト。 偽値と空リストがごっちゃになってる taste がしてイヤでつ。 同じ lisp ばかりじゃねえんだぞと。 - predicate は「述語」でなしに「断言する」でよかったんだっけか? - "\n" が改行文字にすりかわるのは評価じゃなくてリーダーの問題だろ \n ならいいけど \\ が出てきたらこんな理解で困るんじゃないか。 regexp を扱うようになったらパニックだろ。 とか考えた漏れは逝ってよしでつか
109 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/24 20:50] でつ
110 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/24 20:54] >>108 > 同じ lisp ばかりじゃねえんだぞと。 違う Lisp 知らない。教えて。 Scheme は Lisp じゃないし。
111 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/25 09:12] >>99 まだ理解できていないようで・・・
112 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/25 09:30] >>111 あのー、罵倒されても構いませんから、 (lambda ...) と (function (lambda ...)) で具体的に何が変わってくるのか、 もうちょっと詳しく教えてください。 俺の理解では、バイトコンパイルされてしまえば同じ。 そのままだったら、functionのほうがマクロ展開ないぶん、 微妙に速いかもしれない(俺の勝手な推測)というところなんですが。 # quoteの場合が違うのは分かっています。
113 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/25 14:44] それでいいんじゃないの? 個人的には (lambda ...) よりも #'(lambda ...) のほうがパッと見たときにわかりやすいので好み。
114 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/26 10:49] 時間がかかる処理をしていて、何かキーが押されたら中断する、ということを 考えています。試しに下のようなのを書いてみました。 (defun g () (interactive) (let ((i 0)) (while t (setq i (1+ i)) (when (input-pending-p) (keyboard-quit))))) これはうまくいきました。 今、やりたいのは 上記のwhile部分がブラックボックス扱いのときで、 (defun heavy-proc () (let ((i 0)) (while t (setq i (1+ i))) i)) という関数の中身を変更せずに、呼び出した後でキー入力があれば中断して戻 るということがしたいのです。割り込みのような感じです。 (defun f2 () (interactive) (condition-case nil (heavy-proc) ..... とやればいいのかなと思ったのですが、肝心のキーが押されたらエラーを発生 するやり方がさっぱり見当がつかないのです。 なにか良い方法を知っておられましたら、教えてやってくださいまし。
115 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/26 11:42] >>114 condition-case で quit 取るんじゃだめなん?
116 名前:114 mailto:sage [03/10/26 18:05] >>115 アドバイスありがとうございます。 (defun heavy-proc () (let ((i 0)) (while t (setq i (1+ i))) i)) (defun f2 () (interactive) (condition-case nil (heavy-proc) ((quit) (message "aborted.")))) こういうことでしょうか。 これだと、C-g以外のキーを押したときは中断できません。 もうちょっと練ってみます。
117 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/27 01:23] 全てのキーに signal発生させるよう設定したキーマップ使用すれば いけるかも? signalの代わりに throwでもいいけど。
118 名前:114 mailto:sage [03/10/27 09:49] >>117 試しにこうしてみましたが… (defvar tmp-map nil "temporary key map for aborting.") (defun f2 () (interactive) (let ((previous-keymap (copy-keymap (current-local-map)))) (if tmp-map nil (setq tmp-map (make-sparse-keymap)) (define-key tmp-map "a" 'keyboard-quit) (define-key tmp-map "b" 'keyboard-quit) (define-key tmp-map "c" 'keyboard-quit)) (use-local-map tmp-map) (condition-case nil (heavy-proc) ((quit) (message "aborted."))) (use-local-map previous-keymap))) 中断してくれない(^^;
119 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/27 10:25] うーん、自分で bindした keyboard-quitと C-g は扱いが違うって事なのかな?
120 名前:114 mailto:sage [03/10/27 11:47] >>119 今度は以下のようにsignalを使ってみましたが… (defvar tmp-map nil "temporary key map for aborting.") (defun my-quit () (interactive) (signal 'quit nil)) (defun f2 () (interactive) (let ((previous-keymap (copy-keymap (current-local-map)))) (if tmp-map nil (setq tmp-map (make-sparse-keymap)) (define-key tmp-map "a" 'my-quit)) (use-local-map tmp-map) (condition-case nil (heavy-proc) ((quit) (message "aborted."))) (use-local-map previous-keymap))) 相変わらず、中断せずでした。 edebugで追いかけてみると、キーマップ自体は変わってくれているのですが、 heavy-procを呼び出したらC-g以外をセンスしてくれないような感じがします です。
121 名前:114 mailto:sage [03/10/27 12:30] 助言を元に調べました。 なんとなく分かってきた気がします。(気がするだけかも…) (defun heavy-proc () (let ((i 0)) (while t (setq i (1+ i))) i)) (defun f3 () (interactive) (let ((previous-keymap (copy-keymap (current-local-map))) (previous-input-mode (current-input-mode))) (set-input-mode t nil 0 ?a) (condition-case nil (heavy-proc) ((quit) (message "aborted."))) (use-local-map previous-keymap) (set-input-mode (car previous-input-mode) (nth 1 previous-input-mode) (nth 2 previous-input-mode) (nth 3 previous-input-mode)))) キーマップ再定義はせずに、上記のようにすると aキーで中断できるようにな りますた。あとはこれを全部のキー文字に割り当てれば、と考えたのですが… (set-input-mode t nil 0 '(?a ?b)) のような複数指定は不可 (set-input-mode t nil 0 nil) ではデフォルトのC-gになる の様です。…もはや手詰まりか…
122 名前:114 mailto:sage [03/10/28 10:24] ふと思い立って、 (keyboard-translate ?b ?\C-g) とかやってみましたが、やはり中断してくれませんね。 コマンドループ内でC-gというのはかなりの特別扱いの感じがします。 こんなローレベルな関数が効かないなんて…。 # emvaders.elとかどうやってるのかな。ゲームなら割り込みみたいな処理を してると思うんだけど。
123 名前:114 mailto:sage [03/10/28 10:53] emvaders.elでは input-pending-pで処理してますた。 ゲーム的にはこのやり方は納得です。 にしても、ハマりすぎです。 誰かお願いです。ひとつ叩いてやってください。ガツンと。
124 名前:114 mailto:sage [03/10/29 15:54] 苦肉の策として、「最後に押したキーで中断する」というのを考えてみました。 (defadvice heavy-proc (before input-set disable) (set-input-mode t nil 0 last-input-event)) (defun heavy-proc () (interactive) (let ((i 0)) (while t (setq i (1+ i))) i)) (defun f3 () (interactive) (let ((previous-input-mode (current-input-mode))) ;; enable advice (ad-enable-advice 'heavy-proc 'before 'input-set) (ad-activate 'heavy-proc) (condition-case nil (heavy-proc) ((quit) (message "aborted."))) ;; disable advice (ad-disable-advice 'heavy-proc 'before 'input-set) (ad-activate 'heavy-proc) (set-input-mode (car previous-input-mode) (nth 1 previous-input-mode) (nth 2 previous-input-mode) (nth 3 previous-input-mode)))) ややこしいやり方になってしまいました。
125 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/29 16:16] unwind-protect使ったほうがいいよ。
126 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/29 16:46] なぜ C-g で quit がいやなのかようわからんが、アドバイスせんでも (let ((previous-input-mode (current-input-mode))) (unwind-protect (progn (apply #'set-input-mode `(,@(butlast previous-input-mode) ,last-input-event)) (heavy-proc)) (apply #'set-input-mode previous-input-mode))) でいいような。
127 名前:114 mailto:sage [03/10/29 17:56] >>125 , 126 助言、ありがとうございます。 今まで、unwind-protect は実際にどういう場面で用いるのかわかりませんでしたが、 なんかわかったような気がしますです。 > なぜ C-g で quit がいやなのかようわからんが、 bf-mode.elというelispをいじくっているのですが、html をw3mで表示したと きに重いので、キャンセルの手段が欲しいと思ったのです。
128 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/30 01:09] C-gでいいじゃん…
129 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/30 21:47] ファイルへの出力ってどうやってするんですか? とりあえずhoge.txtに"hoge\n"と書いて出力する程度でいいんですが。
130 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/30 21:53] write-regionでいいじゃん…
131 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/30 21:58] >>130 さんくす! ググってもよく分らなかったもので。
132 名前:名無しさん@お腹いっぱい。 mailto:age [03/11/15 19:21] 【徹底的】プログラマーが語るviとemacs 7【バトル】 pc.2ch.net/test/read.cgi/prog/1064605855/ 514 :仕様書無しさん :03/11/15 14:09 Vimの方がEmacsより速いとか言っていた馬鹿が居たなぁ ttp://msdn.microsoft.com/seminar/shared/asp/view.asp?url=/msdntv/episodes/en/20031028lhorndb/manifest.xml&rate=1&WMPVer=9.0.0.3008 どう見てもEmacsの方が速いなプッ 以前のこれと比べてみろよ ttp://seriss.com/people/erco/fltk-videos/tutorial-fltk-hello.html ダセーーー(藁 なんか、Vim抜けてプロンプトでコンパイルしてまた開いてるよプッ しかも、Emacsの方が断然速いな〜 いい加減乗り換えた方が良いんじゃねぇか(藁 それにしてもM$のプログラマホモくせーな
133 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/06 19:06] もはや、このスレもこれまでか… がんばってる同士はおらんのだろうか。
134 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/06 22:27] 2ch以外で頑張ってます。
135 名前:名無しさん@お腹いっぱい。 [03/12/07 17:16] たとえば、それはどこなんでしょう?
136 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/10 02:40] あのー質問なんですが, あるファイルの内容を調査したい場合,Emacs Lisp だと 対象となるファイルを一旦 find-file とかで 全て読み込まなくちゃ駄目なんでしょうか…? 外部プロセスに逃げると言う手も考えましたが, そんなものを使うよりは,Emacs Lisp のみで完結したいので…
137 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/10 03:10] etagsとか? ってか、どんな調査したいのかにもよるのでは?
138 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/10 10:17] dired で % g
139 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/10 10:30] 全部読まなくても (insert-file-contents FILENAME &optional VISIT BEG END REPLACE) でファイルの一部だけを読む事ができるよ。
140 名前:136 mailto:sage [03/12/11 23:27] 御回答どもです >>137 どんな調査ってのはイロイロあるものの, コレさえ解決できればってのは無くて, 要は, open→無視して良いデータは破棄しつつ満足するまでread→close ってのをやりたいだけでして… >>139 ありがとうございます。 info読みなおしました… 今まで如何にイイカゲンに読んでたかを思い知りますた… 名前付きパイプとかも読めちゃうんすねコレ…
141 名前:名無しさん@お腹いっぱい。 [03/12/26 16:20] 一つの関数でλを定義する数は何個ぐらい許されるんでしょうか?
142 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/26 17:03] なにがしたいのか分からんが、とりあえず作ってみたら? もっと意図を明確にしたうえで、ム板のスレで質問するのがいいと思うが。
143 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/26 22:02] (defun newschangelog (start end) "ChangeLog中の不必要な部分を削除" (interactive "r") (save-excursion (save-restriction (narrow-to-region start end) (goto-char start) (replace-regexp "^[ \t]*.*STRONG.*" "") (goto-char start) (replace-regexp "^ *<A HREF.*" "") (goto-char start) (replace-regexp "</A></DT>" "") (goto-char start) (delete-matching-lines "^$") (goto-char start) (replace-regexp "^[ \t]*" "\t") ))) * news/index.html: 記事追加 ★ PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品</A></DT> <DT><STRONG>日経BizTech</STRONG> <A HREF="biztech.nikkeibp.co.jp/wcs/show/leaf/CID/onair/biztech/comp/247927 "> 日本SGI、Linux向けのシステム構築支援サービス</A></DT> <DT><STRONG>c|net</STRONG> <A HREF="japan.cnet.com/svc/rss?id=1261.47623.54525 "> 日本国内のLinuxサーバ市場:ビジネス利用には課題が多い</A></DT> ☆ 上記★から☆までがリージョンに指定されている状態だとします。このとき、 カーソルが★にあるのか☆にあるのかで、M-x newschangelog の結果が異なり ます。
144 名前:143の続き mailto:sage [03/12/26 22:03] 具体的には、カーソルが☆にあると PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品 <DT><STRONG>日経BizTech</STRONG> 日本SGI、Linux向けのシステム構築支援サービス <DT><STRONG>c|net</STRONG> 日本国内のLinuxサーバ市場:ビジネス利用には課題が多い となり、カーソルが★にあると PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品 日本SGI、Linux向けのシステム構築支援サービス 日本国内のLinuxサーバ市場:ビジネス利用には課題が多い となります。 希望する結果は、カーソルが★☆のどちらにあっても PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品 日本SGI、Linux向けのシステム構築支援サービス 日本国内のLinuxサーバ市場:ビジネス利用には課題が多い のようになることです。添削おねがいします。
145 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/26 23:41] なんか例示されてるのと違い、空行が入ってしまうなーと思ったら、 transient-mark-mode かどうかで挙動が違うな。 で、offにして試してみたけど、どちらも okっぽかったけれど。
146 名前:143 mailto:sage [03/12/27 00:21] 検証ありがとうございます。おっしゃるとおり、手元の Emacs 20.7.2 を \emacs -qで起動すると、★☆どちらにカーソルがあっても希望の結果になり ました(transient-mark-mode t/nil のどちらも)。 ところが、XEmacs 21.1 を \xemacs -q で起動させて確認したところ、 transient-mark-mode t/nil どちらの場合も 144 に書いた結果になるのです。 常用しているのは XEmacs なので、それで希望の結果が出て欲しいのです。 皆様のアドバイスをいただきたく思います。よろしくお願いします。
147 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/27 05:08] replace-regexp を (while (re-search-forward REGEXP nil t) (replace-match TO-STRING nil nil)) にすれば直るはず。 特別な理由がない限り lisp program 中で replace-regexp は使わないほうが いいです。 perform-replace を参照。
148 名前:143 mailto:sage [03/12/27 22:46] 147氏のおっしゃるように修正したところ、XEmacs, Emacs の両者で 希望の動作をしてくれるようになりました。ありがとうございます。
149 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/04 14:13] >>1 のelispリファレンス-ja ttp://www.fan.gr.jp/~ring/doc/elisp-manual/elisp.html は 27章 ウィンドウ がまるごと抜けてるからちょっと不便ですた。 ちょっと探したら、 www.i.kyushu-u.ac.jp/~s-fusa/doc/elisp-manual-20-2.5-jp/elisp-ja.html を発見。こっちはちゃんと27章があるじょ。 スタイルシートでカラフルで見やすいなり。 にしても、emacs21版のelispリファ-ja は まだどこにもないんでしょか。
150 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/04 14:43] 149が訳すことにケテーイしますた。
151 名前:名無しさん@お腹いっぱい。 [04/01/04 16:33] がんがれー
152 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/04 17:13] www.gnu.org/software/emacs/elisp-manual/html_chapter/elisp_51.html#SEC729 これだけ訳せばいいんだろうか?
153 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/05 19:56] >>152 駄目. www.i.kyushu-u.ac.jp/~s-fusa/doc/elisp-manual-20-2.5-jp/elisp-ja_1.html#SEC4 にあるように,日本語は改変が認められていません. 故に公開したければ,全文を訳し直す必要がある.
154 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/05 21:01] その GPL 和訳の由来はここ。 www.sra.co.jp/public/doc/gnu/gpl-2j.txt これにも同じく > ・和文文書の本文を改変しないこと。 とある。つまり、禁止してるのは「GPL の和文本文」の改変であって、 Emacs Lisp Reference Manual の和文ではない。 そもそも、元の文書が GPL なのだから改変禁止は不可能。
155 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/05 23:46] 恐ろしいほどの部分引用だな
156 名前:名無しさん@お腹いっぱい。 mailto:asage [04/01/23 04:41] asm-mode で新規作成/既存ファイル開く、でファイル先頭に;(コメント文字) が 自動的に挿入されてしまうんだけど、これを抑制する方法ないでつか?
157 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/23 09:11] それだけでは、うちではそんなことはないとしか言いようがないよ。 それは本当にasm-modeが入れているものなのかな?
158 名前:名無しさん@お腹いっぱい。 mailto:156 [04/01/23 11:26] -q つけて起動したら再現しませんでした…出直してくるぽ。 新規作成したバッファの状態を監視しつつ edebug でステップ実行したいんですけど、 バッファが見当たらない… asm-mode が 呼ばれたときはバッファが存在してるはずでつよね?
159 名前:156 mailto:sage [04/01/23 11:29] まちがえて age ちゃった。 ごめんでつ。>>158 は >>156 です。
160 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/02 02:00] 最近の elisp では when とか unless とか出て来るんですけど、 わたしは while と if と cond くらいしか使いません。 when, unless の利点は何ですか?
161 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/02 02:01] >>160 progn 使わなくていい
162 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/02 02:29] whenとあったとき、ifと違い条件の成立しなかった時の処理はないのだと 一目で分かる。
163 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/02 02:38] 欠点はいらんのか
164 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/02 02:45] 別に ifと置換えとかじゃないし、単純すぎる構文だから欠点もなにも……。
165 名前:160 mailto:sage [04/02/02 02:55] ってことは別に無理して使わなくてもいいってことか。 マクロってよくわかんないけど subr.el 見たら、if に置き換えてるだけみたいね。
166 名前:名無しさん@お腹いっぱい。 [04/02/06 02:12] navi2chなんかで、エンター押したらその行に関係する動作をする機能を作るには 何を使えばいいのでしょうか。 key map を使うのかと思ってnavi2chのソースをみたのですが、 define-key map [return] という行は見つかりませんでした。
167 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 03:23] そのレベルの質問なら、navi2chスレのほうが適切と思うが。
168 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 04:15] (define-key map "\r" 'navi2ch-article-select-current-link)
169 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 04:45] 今回の場合、describe-key で returnに対応するコマンドを調べて、 それを元に grepすれば >>168 が見つかりますな。
170 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 11:48] C-h w RET
171 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 11:49] w じゃなくて k だ
172 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 12:08] ある関数内で auto-compression-mode を有効に束縛したいんですが (let ((auto-compression-mode t)) (insert-file "foo.gz")) じゃ駄目なんですね。 (let ((current auto-compression-mode)) (auto-compression-mode t) (insert-file "foo.gz") (auto-compression-mode current)) こうすべきもんなんでしょうか。なんかもっとスマートな方法ありますか?
173 名前:166 mailto:sage [04/02/06 12:15] >>167-171 みなさんありがとうございました。 勉強になりました。 [return] ではなくて"\r"で定義してあるんですね。
174 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 12:21] >>172 > じゃ駄目なんですね。 変数じゃないならだめだよ。
175 名前:172 mailto:sage [04/02/06 12:36] >>174 いちお変数でもあるんですけどね、って今見てみたら docstring に Setting this variable directly does not take effect; と書いてあった…失礼しますた。やっぱあんな方法でやるしかないのかなあ。
176 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 13:23] with-auto-compression-mode
177 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 18:24] >>176 おーありがとうです。こんなのがあったのか。感謝。
178 名前:名無しさん@お腹いっぱい。 [04/02/06 22:10] emacs21のtool-bar にあるプリンタアイコンはprint-bufferですが、 これを.emacsでpostscript-print-bufferに変えたいんですが、どうやれば 良いすかね?
179 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/07 00:26] (setq tool-bar-map (delq (assq 'print-buffer tool-bar-map) tool-bar-map)) (tool-bar-add-item-from-menu 'ps-print-buffer "print") でどうでしょ
180 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/09 16:51] 空のファイルを作成したいのですがどうやればいいんでしょうか? 動作としては↓のような感じです。 % touch hoge (hogeというファイルは存在していないとして)
181 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/09 17:27] (write-region (point-min) (point-min) "hoge" t)
182 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/09 20:37] >>181 ありがとうございました。
183 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/20 18:29] だれか、mmm で php-mode の indent が効かなくなるの直してくれ。
184 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/24 08:35] mmm と php-mode てなんか相性わるいよね。 漏れは別の不具合のせいで、結局php-mode 単体でつかってまふ。
185 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/01 12:53] '(1 2) '(3 4) => (4 6) みたいにリストの各要素を足してくれるような関数ってありませんでしたっけ?
186 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/01 13:16] (mapcar* '+ '(1 2) '(3 4)) clだけど。
187 名前:185 mailto:sage [04/05/01 13:29] >>186 あれこれ探してみてたんですが cl にあったのか、どうもですた。
188 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/10 20:39] arg1 が non-nil なら a-list に arg2 を append、 arg1 が nil なら b-list に arg2 を append、って処理をやりたいんですが (defun my-test (arg1 arg2) (if arg1 (setq a-list (append arg2 a-list)) (setq b-list (append arg2 b-list)))) これじゃちょっと不恰好な気がします。スマートに実装する方法ありませんか ね。
189 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/11 01:40] (let ((sym (if arg1 'a-list 'b-list))) (set sym (append arg2 (symbol-value sym))))
190 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/11 18:30] >>189 set ってこんな時に使えるのか。サンクスコでした。
191 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/12 08:04] マ板、Emacs Lispスレから流れてきました。 ○×ゲームを作っていくという話題。 とりあえず、入力はこんな感じで。 (read-from-minibuffer " │○│ ―┼―┼― │×│ ―┼―┼― │ │ コンマで区切って2つの数字を入力してください。(例 0,0)")
192 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/12 13:06] 何でminibuffer使う? 一瞬 gomoku.el の部品が使えないかなと思ったけど 自分で書いた方がはやそう。
193 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/12 15:56] ○×か。最初から敷居が高いなぁ。 入力はコンマ区切りよりリストとして入力させる方が良いハックじゃないかな? コンマはパースしなくちゃいけないし。
194 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/12 16:10] 何も考えずに、ここまでやってみた。ボードと終了判定があるだけ。 あとは、エラーチェックの徹底と思考ルーチンかな。 長いので2回に分けます。 (defun ox-index (x y) (+ (* y 3) x)) (defun ox-line (vector y) (format "%c|%c|%c" (aref vector (ox-index 0 y)) (aref vector (ox-index 1 y)) (aref vector (ox-index 2 y)))) (defun ox-board (vector) (format "%s\n-+-+-\n%s\n-+-+-\n%s\n" (ox-line vector 0) (ox-line vector 1) (ox-line vector 2))) (defun ox-read (vector o-or-x) (1- (string-to-int (read-from-minibuffer (format "%s (%cの番です) " (ox-board board) o-or-x)))))
195 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/12 16:12] しょの2 (defun ox-game-over-p (vector) (catch 'loop (dolist (indexes '((0 1 2) (2 5 8) (7 6 8) (0 3 6) (0 4 8) (1 4 7) (2 4 6) (3 4 5))) (let ((marks (mapcar #'(lambda (i) (aref vector i)) indexes))) (when (or (null (remove ?O marks)) (null (remove ?X marks))) (message (format "%s (%cの勝ちです。)" (ox-board board) (car marks))) (throw 'loop t))))))
196 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/12 16:13] あとminibufferよりも新しく編集バッファを作成してエディタ内のテキストを 操作する方が良いと思う。二次元の平面を扱うなら。 例えば以下のような感じ。 (progn (get-buffer-create "hoge") (switch-to-buffer "hoge") (erase-buffer) (insert "○|×|○ \n") (insert "×|○|○ \n") (insert "×|○|× \n"))
197 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/12 16:13] しょの3 (defun ox () (interactive) (let ((board (vconcat '(?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9))) (o-or-x ?O) i mark) (while (not (ox-game-over-p board)) (setq i (ox-read board o-or-x)) (setq mark (aref board i)) (if (member mark '(?O ?X)) (progn (message (format "%s (そこには置けません)" (ox-board board))) (sit-for 1)) (aset board i o-or-x) (setq o-or-x (if (eql o-or-x ?O) ?X ?O))))))
198 名前:名無しさん@お腹いっぱい。 [04/05/12 16:20] Emacsって何?
199 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/12 16:22] >>192 > 何でminibuffer使う? > 一瞬 gomoku.el の部品が使えないかなと思ったけど > 自分で書いた方がはやそう。 その場のノリですが、むりやり理由をつければゲーム後に画面の後かたずけとかが自動的に行われるからです。 >>193 >入力はコンマ区切りよりリストとして入力させる方が良いハックじゃないかな? >コンマはパースしなくちゃいけないし。 置ける場所に番号を書いておいて、それを入力してもらう方法をとってみました。 思考ルーチンも総あたりすればいいだけですね。 ox-game-over-pではthrowでdolistを早抜けしているんですけど、elisp的な 定石はこれでいいのでしょうか。
200 名前:鬱­猫­2030 ◆utuPOcVnl. mailto:utucat@yahoo.co.jp [04/05/12 18:14] ここで>>1 を読んで修業すればnavi2chみたいの書けますか?
201 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/12 19:22] 書けるよ
202 名前:鬱­猫­2030 ◆utuPOcVnl. mailto:utucat@yahoo.co.jp [04/05/12 21:20] ネット関係のライブラリが標準で用意されているのですか? P2P関係のものを何か作りたいのですがtcp/ip層までいじれますか?
203 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/12 21:43] リリースされてる版だと、Emacs Lisp からできるのは TCP の connect(2) だけ。 accept(2) へのインターフェイスは 用意されてないから P2P やりたいなら 下請けの外部プログラムが必要。
204 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/13 00:53] M-x namazu とする代わりに F2 キーでカーソルのある単語を検索できればと思い, namazu.el を読んだ上で以下のように設定しました しかしこの設定で F2 キーを叩いても, 別のバッファが開いて「32 件検索しました」 という メッセージが出るところまで行くのですが 検索結果がでません どこを直せばよいのでしょうか (global-set-key [(f2)] (lambda () (interactive) (namazu namazu-search-num namazu-default-dir (current-word))) )
205 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/13 04:54] namazu の最初の引数は PAGE-NUM みたいなので普通は 0 でしょう。
206 名前:204 mailto:sage [04/05/14 00:09] >>205 コメントありがとうございます 0 を入れてみたのですが改善しませんでした 出力結果は以下のようにヘッダとフッタだけ出てるようで中身が出ません M-x namazu でインタラクティブに実行するのは問題ないのですが。。。 検索結果 参考ヒット数: [ BufferedReader: 52 ] 検索式にマッチする 52 個の文書が見つかりました。 現在のリスト: 1 - 0 ペイジ: [1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17][18][19][20]
207 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/14 00:35] namazu-search-num が 0 になってない? (namazu namazu-search-num namazu-default-dir (current-word)) で namazu-search-num を 0 にするんじゃなくて、 (namazu 0 namazu-default-dir (current-word)) にしたら? ってこと。
208 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/14 14:01] 読書メモの為に下みたいなのを挿入したいのですけども。 Date:2004-01-26 Page: Memo: で、ムチャクソ頑張って下みたいなのを書きました。 (defun bookz () "Retune the current time as a string in Date from." (format-time-string "Date:%04Y-%02m-%02d\nPage:\nMemo:") ) (defun insert-bookz nil "Insert bookz." (interactive) (insert (bookz)) ) (define-key global-map "\C-c\C-d" 'insert-bookz) なんかもっと綺麗に書く方法とかありますか?