[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/03 02:06 / Filesize : 277 KB / Number-of Response : 955
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【叩かれて】Emacs Lisp道場【強くなれ】



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

ではひとつ、コード中心の熱いバトルをよろぴく。


362 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 01:27:41 ]
Emacsのunibyte/multibyteってのはタダのバイト列として読むか
なんらかのエンコーディングで表現された文字として読むかってとこで生じる。
単に表現されたときに1バイトになるかってのは関係ない。


363 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 01:49:37 ]
>>362
うそー、関係あるよ。

src/alloc.c:
Lisp_Object
make_string_from_bytes (contents, nchars, nbytes)
const char *contents;
int nchars, nbytes;
{
register Lisp_Object val;
val = make_uninit_multibyte_string (nchars, nbytes);
bcopy (contents, SDATA (val), nbytes);
if (SBYTES (val) == SCHARS (val))
STRING_SET_UNIBYTE (val);
return val;
}

文字列中の文字が全て1バイトになるかを思いっきり考慮してんじゃん。

364 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 02:29:27 ]
はいはい。それはmake_string_from_bytesだからでしょ。
それは考慮してるんじゃなくてunibyteにするかmutlibyteにするかっていう
判定材料に使ってるだけだよ。
その関数の使われるところがどういうところかも見れば自明だと思うんだけど。


365 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 03:06:30 ]
自日月

366 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 03:38:11 ]
>>364
はいはい。じゃあ
(multibyte-string-p (string 97)) => nil
(multibyte-string-p (string 53794)) => t
を説明してみ。

367 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 03:49:16 ]
アホだな。Fstringってmake_string_from_bytesを使ってる例でしかないじゃん。
それはインタフェースからしてmultibyteかどうかの情報が与えられないから、
multibyteかどうかを判定するのに文字の範囲から推定するしかできないからでしょ。

逆に例えば既にmultibyteである情報源から文字列を作るとき、
要するにmultibyte bufferからsubstringする場合なんかはいちいち
中身が1バイト文字だけかどうかなんて考慮しないよ。

まあソースコード読みなよ。
Emacsでのunibyte/multibyteの扱いってものについて学習してらっしゃい。


368 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 05:04:41 ]
>>362
> 単に表現されたときに1バイトになるかってのは関係ない。
に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
ると言ってるのに、SINGLE_BYTE_CHAR_P だけからなる文字列も multibyte に
なり得ると反論してもしょうがないだろうに。

369 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 05:27:37 ]
> に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
> る
そこが問題なのか? 違うだろ。だって当たり前すぎるほど当たり前じゃん。
>>363はタダのバイト列として読むんじゃなくてEmacsの内部表現で表現された
文字列として読んでるんだから。

そこを問題にしているとしたら363の方こそナンセンス。



370 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 07:02:02 ]
>>366がどういう意図をもっているのか自分で説明すべきだろ。
何を根拠に何を主張したいのか書かなきゃ単なる煽りの手口。




371 名前:359 mailto:sage [05/02/19 09:05:52 ]
>>360
> (find-charset-string "abc")

>>361
> (re-search-forward "[[:nonascii:]]" (point-max) t)
おー、ありがとう。勉強になるっす。

> (re-search-forward "\\cj" (point-max) t)
うぼあ、なんたる初歩的ミス orz

372 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/20 14:51:39 ]
Emacs の multibyte, unibyte まわりって確かにわかりずらいですよねー。
試しに unibyte な文字列中に "\\cj" で検索かけてみたんですけど、結果は nil なん
ですねぇ。当然と言えば当然ですが。

(string-match "\\cj" "あいうえお")
=> 0
(string-match "\\cj" (string-as-unibyte "あいうえお"))
=> nil

(find-charset-string "あいうえお")
=> (japanese-jisx0208)
(find-charset-string (string-as-unibyte "あいうえお"))
=> (eight-bit-graphic eight-bit-control)

coding-system の binary, raw-string とかとの関係も難しい・・・。

373 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/20 14:56:20 ]
閑話休題。
iswitchb で migemo を使えるようにしてみたですよ。

(setq iswitchb-regexp t)
(setq iswitchb-use-migemo-p t)
(defadvice iswitchb-get-matched-buffers (before iswitchb-use-migemo activate)
"iswitchb で migemo を使ってみる。"
(when iswitchb-use-migemo-p
(ad-set-arg 0 (migemo-get-pattern (ad-get-arg 0)))))


374 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/20 18:40:57 ]
>>373
おおぅ、ナイスです。
ありがたく使わせていただきます。

375 名前:373 mailto:sage [05/02/21 23:35:24 ]
昔の「自慢の.emacsを貼り付けよう」スレのように活気付く事を祈って。
dired とか ibuffer で色を付けて、長いファイル名があってもそれなりに見やすくしてみる。

まずは dired:
(defun dired-font-lock-information-matcher (limit)
"dired でまん中へんに色を付けてみる matcher。"
(when (dired-move-to-filename nil limit)
(let (end)
(backward-char)
(setq end (point-marker))
(progn (beginning-of-line)
(forward-sexp (if (looking-at dired-re-mark) 2 1))
(forward-char))
(store-match-data (list (point-marker) end)))
(forward-line)))

(font-lock-add-keywords
'dired-mode
'((dired-font-lock-information-matcher . font-lock-constant-face)))


376 名前:373 mailto:sage [05/02/21 23:36:57 ]
んで ibuffer:
(setq ibuffer-fontify-information-field-list '(size mode))
(defadvice ibuffer-insert-buffers-and-marks (after ibuffer-fontify-information-field activate)
"ibuffer でまん中へんに色を付けてみる。"
(save-excursion
(ibuffer-goto-beg)
(while (not (eobp))
(let ((pos (point))
(limit (line-end-position)))
(while (and (setq pos (next-single-property-change pos 'ibuffer-field nil limit))
(< pos limit))
(goto-char pos)
(let ((buffer-read-only nil)
(field (get-text-property (point) 'ibuffer-field))
(beg pos))
(when (memq field ibuffer-fontify-information-field-list)
(setq pos (next-single-property-change pos 'ibuffer-field nil limit))
(goto-char pos)
(put-text-property beg pos
'face 'font-lock-constant-face)))))
(forward-line))))

dired-mode で、dircolors の色を使うようにすると派手でいいかもしれないとか思った。


377 名前:373 mailto:sage [05/02/22 00:21:53 ]
dircolors 使うやつができたっぽい。

(require 'dircolors)
(font-lock-add-keywords
'dired-mode
(mapcar (lambda (x)
(list
(format "\\(%s\\)$"
(mapconcat (lambda (ext)
(if (stringp ext)
(format "\\.%s" ext)
(format ".*%s.*" (cadr ext))))
(car x)
"\\|"))
`(".+" (dired-move-to-filename) nil (0 ',(cadr x)))))
dircolors-extension))


378 名前:名無しさん@お腹いっぱい。 mailto:sage [05/03/20 13:59:42 ]
(defadvice next-error (after next-error-plus-alpha activate)
(insert "OMOITSUKANAI"))
定義してgrep+next-error実行しても, OMOITSUKANAIがバッファに挿入され
ないのはどうしてなのだろうか

379 名前:名無しさん@お腹いっぱい。 mailto:sage [05/03/20 18:00:24 ]
>>378
(with-current-buffer ) を抜けたあとだから。


380 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/21(月) 13:45:50 ]
>>379 with-current-buffer 以後でも insert を可能にする方法は何
かありますか?



381 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/21(月) 18:16:49 ]
>>380
with-current-buffer

382 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/23(水) 00:29:38 ]
>>381
(defadvice next-error (after next-error-plus-alpha activate)
 (with-current-buffer next-error-last-buffer
   (insert "OMOITSUKANAI")))

なりませんけど・・・?


383 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/23(水) 09:16:12 ]
>>382
(when (setq next-error-last-buffer (next-error-find-buffer))
...

384 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/23(水) 14:52:04 ]
>>383
その中に入れても結局なりませんでした。。。

385 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/23(水) 21:36:02 ]
>>384
最新の Emacs だと grep バッファは読み込み専用だけど,あらかじめちゃんと
書き込めるように対処はしてあるの?


386 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/24(木) 00:33:30 ]
>>385
書き込みしたいのは、次のエラー箇所が見つかったファイル (この場合はマッチするファイル)に
なので、 *grep* バッファ上でではありません。。
`next-error-last-buffer' がそのファイルじゃないのですか?

387 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/24(木) 01:36:43 ]
試してみると
next-error-last-buffer's value is #<buffer *grep*>
ってなるから違うみたい


388 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/24(木) 22:05:20 ]
emacs 21.4 を使っています。
カーソル配下のtextのface取得方法が解からないので、教えてください。
やりたいことは、特定の単語の色の変更では無く、
その単語の所属するキーワードグループまるごと色を変更したい為、
カーソル配下の単語から、faceを特定したいということです。

お願いします。

389 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/24(木) 22:51:54 ]
(get-text-property (point) 'face)

390 名前:388 mailto:sage [2005/03/25(金) 00:51:21 ]
>>389
thx



391 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/30(水) 12:38:13 ]
Emacs には「グラフ」データ構造の library がないように思えます。
ここでプログラムしてみちゃってください。

392 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/30(水) 12:52:18 ]
ム板でやると盛り上がると見た。

393 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/30(水) 17:48:01 ]
>>392
ここでよくない? こういうプログラミング練習の為にこのスレッドがあるんじゃないの?

394 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/30(水) 18:33:00 ]
ライブラリ的なのはあっちっしょ。好きそうな人もいるし。

395 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/30(水) 21:02:12 ]
cons と car と cdr で事足りる

396 名前:名無しさん@お腹いっぱい。 [UNIX時間(+0900)35年,2005/04/03(日) 07:43:30 ]
>>395
おまえは、 「情報なんて 0 と 1 のみで事足りる」
とでも言うのか?

アホ。

397 名前:名無しさん@お腹いっぱい。 mailto:sage [UNIX時間(+0900)35年,2005/04/03(日) 20:28:38 ]
「ハッカーと画家」に
car, cdr, cons, quote, cond, atom, eq
だけで Lisp の関数は書けるとかって書いてあった。
四則演算はどうやってやるんだ?

398 名前:名無しさん@お腹いっぱい。 mailto:sage [UNIX時間(+0900)35年,2005/04/03(日) 20:57:40 ]
(t) => 1、(t t) => 2、(t t t) => 3
のように表わすことにして
(defun plus (x y)
(cond (y (plus (cons (car y) x) (cdr y)))
(t x)))
(plus '(t t t) '(t t))
=> (t t t t t)
足し算ができれば後はどうとでも。

399 名前:名無しさん@お腹いっぱい。 mailto:sage [UNIX時間(+0900)35年,2005/04/03(日) 23:04:31 ]
398 は効率悪すぎだから (t) => 1、(nil t) => 2、(t t) => 3 と
little endian な 2 進表記にして

(defun plus (x y &optional c)
(cond ((cond ((eq x nil) (eq y nil)))
(cond (c (cons c nil))))
((car x)
(cond ((car y)
(cons c (plus (cdr x) (cdr y) t)))
((cons (not c) (plus (cdr x) (cdr y) c)))))
((car y)
(cons (not c) (plus (cdr x) (cdr y) c)))
((cons c (plus (cdr x) (cdr y) nil)))))

(defun mul (x y)
(cond ((eq y nil) nil)
((plus (cond ((car y) x))
(mul (cons nil x)
(cdr y))))))

(plus '(t t nil t) '(t nil t)) ; 11 + 5
=> (nil nil nil nil t) ; 16

(mul '(t t nil t) '(t nil t)) ; 11 * 5
=> (t t t nil t t) ; 55

400 名前:名無しさん@お腹いっぱい。 [2005/04/05(火) 10:30:07 ]
おいおまえら、知能ベースを elisp で書けよ。
はやくしろ。



401 名前:Zeno ◆5nZQbNmQPs [2005/04/05(火) 16:08:22 ]
Re:>400
              それはいいアイディアである

402 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/05(火) 17:27:56 ]
お前なんかに誉められてもうれしくないよ

403 名前:Zeno ◆5nZQbNmQPs [2005/04/06(水) 11:34:00 ]
Re:>402
              お前のことは誉めていない。
          知能ベースでも書いてから物を言うようにしろ

404 名前:Zeno ◆5nZQbNmQPs [2005/04/06(水) 11:43:29 ]

Tail Recursion は未だに Elisp に実装されていない。
この事実に理由はあるのか?


405 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/06(水) 12:09:56 ]
tail recursion なら実装されてますがなにか?
おまいの言いたいのは tail recursion optimization のことだろ。
理由はもちろんある。
-- 終了 --

406 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/06(水) 13:29:51 ]
あんま相手すんな。
伝染るぞ。

407 名前:Zeno ◆5nZQbNmQPs [2005/04/06(水) 17:14:11 ]
Re:>405

             じゃあお前が optimization しろ

408 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/06(水) 17:59:39 ]
動的スコープの言語では末尾再帰の最適化は不可能
(defun bar ()
(fset 'foo (lambda () (print "bar"))))
(defun foo ()
(bar)
(foo))

409 名前:Zeno ◆5nZQbNmQPs [2005/04/07(木) 14:22:10 ]

         A* サーチ・アルゴリズムの elisp バーションが
              ほしくないわけでもないな。

____________
"Self" is that which is in the process of becoming... --Zeno
Today's Lucky Number: 421

410 名前:名無しさん@お腹いっぱい。 [2005/04/07(木) 23:12:09 ]
>>409
負けたな



411 名前:sakurai osamu mailto:sage [2005/04/08(金) 02:23:21 ]
www.club-paruparo.com/

フィリピン万個伝説よろ

windows 最高!

412 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/08(金) 13:01:28 ]
ある文字列から四文字ずつ取り出してリストを作りたいのですが
どういう風にすればよいのでしょうか?

"いろはにほへとち" という風な文字列から '("いろはに" "ほへとち")
という風なリストを得たいのです。
文字列は四文字以上で4の倍数であることは保証されています。


413 名前:412 mailto:sage [2005/04/08(金) 13:59:44 ]
length と substring を使うと簡単にできました。
どうもすいません。

414 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/09(土) 21:30:09 ]
Dired-modeのコピーとかをバックグラウンドでできませぬか?

415 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/13(水) 21:05:28 ]
拡張子 .tex を開けると自動的にflyspell-modeになるようにしたくて、
ついでに辞書もデフォルト(英語)からかえたくて、以下の
コードを~/.emacs にいれたんですけど、flyspell-mode
も辞書の変換もうまくいきません。なにがだめなんでしょう?


(add-hook 'LaTeX-mode-hook 'flyspell-mode)
(setq LaTex-mode-hook
'(lambda ()
(setq ispell-personal-dictionary "~/.ispell-dico-perso")
(ispell-change-dictionary "dansk")
))

エラーのメッセージはでないんですけど、、、



416 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/13(水) 21:28:40 ]
>>415
>も辞書の変換もうまくいきません。なにがだめなんでしょう?
せっかくadd-hookしたのに、次のsetqで上書きされてます。
danskに萌えたので、設定例も。
(setq LaTex-mode-hook
(lambda ()
(flyspell-mode 1)
(set (make-local-variable 'ispell-personal-dictionary) "~/.ispell-dico-perso")
(ispell-change-dictionary "dansk")
))


417 名前:415 mailto:sage [2005/04/13(水) 21:45:32 ]
>>416
ありがとうございます。萌えてくださって。ってちがうか。
書いて下さった設定例でやってみたんですけど、
やっぱりうまくいきません、、、辞書も、英語のままです。
なにがいったいだめなんでしょうか、、、



418 名前:416 mailto:sage [2005/04/13(水) 21:56:59 ]
>>417
だめでしたか。
当方ispell-modeを英語で使ったことがあるだけで、personal-dictionaryなん
て変えたこともないのでした。
せっかくなので少し調べてみます。


419 名前:415 mailto:sage [2005/04/13(水) 22:03:09 ]
>>418
きょ、恐縮です、、、、
わたしももうちょっといろいろやってみます。

420 名前:416 mailto:sage [2005/04/13(水) 22:09:56 ]
flyspell-modeだとプロセスを上げっぱなしにし、
それに付随して、辞書の指定はプロセス立ち上げ時なので、
辞書の設定を先に行う必要があるようですね。
こんなんでどうでしょうか。
(setq LaTex-mode-hook
(lambda ()
(let ((ispell-local-dictionary "dansk"))
(set (make-local-variable 'ispell-personal-dictionary) "~/.ispell-dico-perso")
(flyspell-mode 1)
)))
#自分で試してみる気はしません





421 名前:415 mailto:sage [2005/04/13(水) 22:21:46 ]
>>420
調べて下さってありがとうございます。m(_ _)m
ですが、やはりだめでした。。。
そもそも、なぜflyspell-modeさえ自動的にたちあがらないのは
なぜなのか、、、
もうちょっとがんばってしらべてみます。


422 名前:416 mailto:sage [2005/04/13(水) 22:36:58 ]
げ、そういう状態でしたか。
LaTex-mode-hook じゃなくて latex-mode-hook なのでは?


423 名前:415 mailto:sage [2005/04/13(水) 22:49:20 ]
>>422
あああありがとうございます!(涙
うまくいきました!
あのコードはどっかから拾ってきたものなので盲目に過信してました,,,orz

最初に書いてもらったコードのLaTex をlatexに変えることでいけました。
一応貼っておきます。

(setq latex-mode-hook
(lambda ()
(flyspell-mode 1)
(set (make-local-variable 'ispell-personal-dictionary) "~/.ispell-dico-perso")
(ispell-change-dictionary "dansk")
))


424 名前:416 mailto:sage [2005/04/13(水) 23:12:13 ]
>>423
プロセスを作成するのは最初のparse時であり、
ispell-change-dictionaryでispellプロセスがあれば殺す、
という処理でした。

この辺はflyspellかispellかは関係ないですね。勘違いしてました。


425 名前:415 mailto:sage [2005/04/13(水) 23:50:34 ]
>>424
わたしにはまだよくわかりませんが
御教授戴きありがとうございました。時間ができしだい
Lispのマニュアルも最初から最後まで読もうと思います。

426 名前:Zeno ◆5nZQbNmQPs [2005/04/16(土) 19:01:21 ]
Reply-to:>>425
    よかったな。 Lisp の場合、フリーでダウンロードできる本が沢山ある。
                 探して読め。

____________
If T is consistent, T !|- G_T.
If T is ω-consistent, T !|- ¬G_T.

427 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/16(土) 20:35:55 ]
引数で与えたローマ字文字列を、平仮名に変換してくれる関数ありませんか?


428 名前:Zeno ◆5nZQbNmQPs [2005/04/16(土) 20:39:49 ]
Reply-to:>>427
> 引数で与えたローマ字文字列を、平仮名に変換してくれる関数ありませんか?

        そんなのあるもなにも、自分で簡単に書けるだろうが。

____________
If T is consistent, T !|- G_T.
If T is ω-consistent, T !|- ¬G_T.

429 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/17(日) 09:38:00 ]
>>427
kakasi 使っていいなら kakasi.el とか skk-kakasi.el とかを参考にすると
か。

430 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/17(日) 17:45:37 ]
読み込んだら文字化け!
何とかして!!



431 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/17(日) 17:48:49 ]
線香と水で供養する!

432 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/17(日) 23:03:48 ]
見るんじゃない 感じるんだ
そのうち文字化けでも読めるようになる


433 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/17(日) 23:44:43 ]
なにその Rogue like

434 名前:Zeno ◆5nZQbNmQPs [2005/04/18(月) 12:23:06 ]
Reply-to:>>427
> 引数で与えたローマ字文字列を、平仮名に変換してくれる関数ありませんか?

                pt を 0 で始める。
         pt を相対として、 substring で引数の文字列の
           `one-char'、`two-char'、`three-char'
                 をゲットする。

            s は empty string として初期化。

                (setq s (concat s
                   (cond
             ((string= one-char "a" ) "あ")
             ((string= one-char "i" ) "い")
                   ...
             ((string= two-char "ka" ) "か")
                   ...
                   )))
               んで、 pt を動かす。

               上の作業を繰りかえせ。
        Elisp 道場なんだから、後は自分で組み立てろバカ。


____________
If T is consistent, T !|- G_T.
If T is ω-consistent, T !|- ¬G_T.

435 名前:.Zeno ◆5nZQbNmQPs [2005/04/18(月) 12:24:07 ]
Reply-to:>>427
> 引数で与えたローマ字文字列を、平仮名に変換してくれる関数ありませんか?

pt を 0 で始める。
pt を相対として、 substring で引数の文字列の
`one-char'、`two-char'、`three-char'
をゲットする。

s は empty string として初期化。

(setq s (concat s
(cond
((string= one-char "a" ) "あ")
((string= one-char "i" ) "い")
...
((string= two-char "ka" ) "か")
...
)))
んで、 pt を動かす。

上の作業を繰りかえせ。
Elisp 道場なんだから、後は自分で組み立てろバカ。

436 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 12:48:24 ]
二日考えた結果がそれか

437 名前:名無しさん@お腹いっぱい。 [2005/04/18(月) 13:13:37 ]
うん。何でそう書くのかって感じだな。

438 名前:Zeno ◆5nZQbNmQPs [2005/04/18(月) 13:54:18 ]
Reply-to:>>436
                別に考えていない。

Reply-to:>>437
    相手が初心者である故、一番直観的な実装方法を書いてやっただけだ。
   実際、ストリングではなく、char 単位で比較をした方が早く処理できる。

____________
If T is consistent, T !|- G_T.
If T is ω-consistent, T !|- ¬G_T.

439 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 14:06:21 ]
ふつーに書けば
(let ((r-h-alist
'((a . あ) (i . い) (u . う) (e . え) (o . お)
(ka . か) (ki . き) (ku . く) (ke . け) (ko . こ)
(sa . さ) (si . し) (su . す) (se . せ) (so . そ))))
(defconst r-h-table
(let ((table (make-hash-table :test 'eq)))
(dolist (x r-h-alist)
(puthash (car x) (cdr x) table))
table))
(defconst r-h-regexp
(regexp-opt (mapcar (lambda (x) (symbol-name (car x))) r-h-alist))))
(defun r-h (roma)
(let ((start 0) result)
(while (string-match r-h-regexp roma start)
(if (> (match-beginning 0) start)
(push (substring roma start (match-beginning 0)) result))
(setq start (match-end 0))
(push (symbol-name (gethash (intern (match-string 0 roma)) r-h-table))
result))
(push (substring roma start) result)
(apply #'concat (nreverse result))))
こんな感じだろ。cond で比較してくなんて小学生か?

440 名前:Zeno ◆5nZQbNmQPs [2005/04/18(月) 14:16:32 ]
Reply-to:>>439
             最適化などいくらでもできる。
     その関数をプログラム中に何度も使用のであれば、早くすればよい。
    さっきも言ったように「一番直観的な実装方法を書いてやっただけ」だ。
       吾の君ので比較した場合、どっちが直観的かは自明である。

____________
If T is consistent, T !|- G_T.
If T is ω-consistent, T !|- ¬G_T.



441 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 14:31:47 ]
ローマ字とかなの対応リスト作ったほうが直感的だよ。

442 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 14:32:27 ]
中学生じゃなかったっけ

443 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 14:34:59 ]
>>440
おツムの程度がずいぶんお粗末ですねえ。


444 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 15:11:40 ]
438 が最適化されていると感じるのなら
(defconst r-h-alist
'(("a" . "あ") ("i" . "い") ("u" . "う") ("e" . "え") ("o" . "お")
("ka" . "か") ("ki" . "き") ("ku" . "く") ("ke" . "け") ("ko" . "こ")
("sa" . "さ") ("si" . "し") ("su" . "す") ("se" . "せ") ("so" . "そ")))
(defconst r-h-regexp
(regexp-opt (mapcar #'car r-h-alist)))
(defun r-h (roma)
(let ((start 0) (result ""))
(while (string-match r-h-regexp roma start)
(setq start (match-end 0))
(setq result (concat result
(cdr (assoc (match-string 0 roma) r-h-alist)))))
result))
これで理解できるかな。
ローマ字にマッチする正規表現を検索し、結果をひらがなとの対応表から引く。
one-char two-char とやらを cond でだらだら比較するよりずっと「直観的」
じゃないか。

445 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 15:39:00 ]
ローマ字綴りが変でマッチしない時の処理を加えねば。

446 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 15:53:42 ]
式が違っているのに、算盤使うか電卓使うかで喧嘩されてもなあ

447 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 16:04:31 ]
コードも出してこないのに、口先だけで煽られてもなあ

448 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 17:24:31 ]
アンサーノーと電卓の奇屍

449 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 20:46:10 ]
Zeno ◆5nZQbNmQPs やこれに類似したレスは池沼コテなので、スルー推奨

450 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/18(月) 22:41:34 ]
もう少しいじれば n=(ry くらい言い出すのではなかろうか。



451 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/23(土) 10:15:07 ]
Zeno ◆5nZQbNmQPs (笑)

452 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/24(日) 17:21:08 ]
「em → emacs」 のabbreviation展開が定義してあるとして、
text-mode や emacs-lisp-mode などで例えば
( em
の後に expand-abbrev を実行すれば展開がされるのですが、
(em
の後に expand-abbrev を実行しても、emacs への展開がされません。

どうすれば、後者の場合にも展開がなされるようになりますか?

453 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/05/02(月) 22:11:39 ]
今日の日付2005-05-02から一日前とか二日前の日付をゲットする
うまい方法ある?なんか普通にプログラムすると、汚くなりそうなので

454 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/05/02(月) 22:49:46 ]
current-timeにオフセット指定できたらなー。

455 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/05/02(月) 22:55:51 ]
time-date.elのtime-addとか使ってみるとか?

456 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/05/02(月) 23:51:02 ]
pc8.2ch.net/test/read.cgi/tech/1068467385/306-307


457 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/05/03(火) 16:57:33 ]
float-time は?

458 名前:457 mailto:sage [2005/05/03(火) 16:59:41 ]
全然読んでなかった。キャンセルします。

459 名前:453 mailto:sage [2005/05/03(火) 19:00:32 ]
>>456
サンクス。

460 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/05/29(日) 18:46:12 ]
すみません,きわめて初歩的な質問です.

setq で,関数側の名前空間に lambda 関数をセットするにはどうしたら良い
のでしょうか?つまり,(defun square (x) (* x x)) と同じことを setq で
やるにはどうしたら良いでしょうか?

Common Lisp (というか,xyzzy Lisp)では
(setq square #'(lambda (x) (* x x))) でできるのですが.




461 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/05/29(日) 18:58:14 ]
fset

462 名前:名無しさん@お腹いっぱい。 [2005/05/29(日) 19:00:09 ]
        ∧ ∧
       (σ・∀・)σ  460 ゲッツ!!
        \  \
       /    \
       ∪ ̄ ̄ ̄\)






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<277KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef