07/05/29 02:58:34
>>909
最近、ちょっと scheme で遊んでたもので・・・。
> Emacs Lisp じゃー再帰は実用的じゃないお。
調べてみたところ、再帰回数が max-lisp-eval-depth で制限されてる、
末尾再帰が最適化されない、のようなことがあるのですね。
> しかも defun は internal define と違ってグローバルだし…。
M-x help f で関数のリスト見たら、my-mapcar-iter があって驚きました。
よくよく考えてみたら、setq はいらなかった。
なんでつけたんだろう。
まずいところ多すぎorz
912:名無しさん@お腹いっぱい。
07/05/29 07:07:10
>>905
改宗すればおk
913:名無しさん@お腹いっぱい。
07/05/29 10:07:37
cl 使えば flet で関数内関数使えるよ。
914:名無しさん@お腹いっぱい。
07/05/29 12:55:46
flet を使って書き直すなら、こんなかんじでしょうか。
たしかに my-mapcar-iter が隠れた。これ便利かも。
(require 'cl)
(defun my-mapcar (func list)
(flet ((my-mapcar-iter (func list rtn)
(if (null list)
(reverse rtn)
(my-mapcar-iter func (cdr list)
(cons (funcall func (car list)) rtn)))))
(my-mapcar-iter func list '())))
915:名無しさん@お腹いっぱい。
07/05/29 22:24:57
…再帰するなら labels じゃねーとダメなんじゃね? cl のバグ?
ズバリこうだろ。while 版より短い!! 俺のバイク小屋ハァハァ
(defun my-mapcar (func lst)
(let ((result nil))
(dolist (e lst)
(push (funcall func e) result))
(nreverse result)))
916:名無しさん@お腹いっぱい。
07/05/29 22:27:10
なんとなく nreverse なしのループで書いてみた
(defun my-mapcar (fun list)
(let* ((result (list nil))
(x result))
(while list
(setcdr x (list (funcall fun (car list))))
(setq x (cdr x) list (cdr list)))
(cdr result)))
>>915
flet を macroexpand してみればわかるよ
まあしょうがないんだろうけどちょっと気持ち悪いよね
917:名無しさん@お腹いっぱい。
07/06/02 08:50:13
ずびまぜん。
elispで 16進数文字列を整数に変換する楽な方法ってありません?
(hoge "64") => 100
ってなるような。
(defun hoge (s)
(string-to-number (concat "#x" s)))
とかじゃ 0が返ってきてしまいました。
918:名無しさん@お腹いっぱい。
07/06/02 08:59:28
(defun hage (s)
(string-to-number s 16))
↓
(hage "64")
↓
100 ウマー
919:名無しさん@お腹いっぱい。
07/06/02 09:16:44
おお、そんなところに &optional があったとは...
infoをもっとちゃんと読むべきでした。
どうも有難うございました。
920:名無しさん@お腹いっぱい。
07/06/02 16:36:52
>>868-
921:名無しさん@お腹いっぱい。
07/06/02 21:22:45
知ってる人も多いだろうけど C-h f めちゃくちゃ便利だよ。
関数定義してるソースの該当部分にも飛べる。
922:名無しさん@お腹いっぱい。
07/06/03 00:27:47
emacs22でも、mode-infoも動いてくれるしね。
923:名無しさん@お腹いっぱい。
07/06/10 19:00:25
あるオブジェクトに対し、car-safeが非nilとなる時
cdrでなくcdr-safeを使うべき局面ってある?
924:名無しさん@お腹いっぱい。
07/06/10 23:36:38
>>923
car-safe が non-nil なら対象は list ってことだから、そんな局面はない、
と思う。
925:名無しさん@お腹いっぱい。
07/06/27 22:28:03
同じ名前の変数 (defvar hoge)と関数 (defun hoge ())が定義されているとき、
変数だけ定義を消すことってできますか?
(unintern 'hoge) だと、両方消えてしまうので。
926:名無しさん@お腹いっぱい。
07/06/27 22:36:59
makunbound
c.f.
fmakunbound
927:名無しさん@お腹いっぱい。
07/06/27 22:45:39
ぬりがとう。
ところでこれ何て読むのですか?
(エフ)メイク・アン・バウンドでいいんかな?
思い出されるcreat()。
928:名無しさん@お腹いっぱい。
07/06/27 23:18:45
>ところでこれ何て読むのですか?
なんでしょうね?
>思い出されるcreat()。
なるw
929:名無しさん@お腹いっぱい。
07/06/29 01:06:36
defconstしてるものには、時に大文字のシンボルを使ってみるのも一興かなと
ふと思った。
たぶんウザいだろうけど。
930:名無しさん@お腹いっぱい。
07/08/07 22:22:42
EmacsがXで動いているときだけ、
C-zでアイコン化しない様にしたいと思っています。
Xで動いているのかterminalで動いているのか判別するには
どうしたらよいのでしょうか。
931:名無しさん@お腹いっぱい。
07/08/07 22:29:27
window-system
932:930
07/08/07 22:33:57
>931
ありがとうございます。
とりあえず、
(if window-system (global-set-key "\C-z" 'shell))
としてみました。
933:名無しさん@お腹いっぱい。
07/08/21 05:23:38
M-x shell
を.emacsファイルの読み込み時に動作させるにはどうしたらよいのでしょうか。
934:名無しさん@お腹いっぱい。
07/08/21 10:02:38
本当に文字通りそうしたいのならば
(shell)
と書く。
935:名無しさん@お腹いっぱい。
07/08/21 12:13:59
>>934
できました。ありがとうございました。
936:名無しさん@お腹いっぱい。
07/08/26 17:18:02
(global-set-key [?\C-;] 'なにか)
とか
(global-set-key "\C;" 'なにか)
とやってもエラーがでて動きません。
;をjにしたら動いたので”なにか”が間違っていることはいないと思います。
C-;やC-, C-. へのバインドを指定するにはどうしたらよいのでしょうか
どなたか教えていただけないでしょうか?
937:名無しさん@お腹いっぱい。
07/08/26 19:00:19
[(control ?;)]
設定程度の質問なら、次回からelispスレじゃなくてemacsスレ行きな。
938:名無しさん@お腹いっぱい。
07/08/26 21:58:08
>>937
ありがとうございます
今後は気をつけます
どうもすいませんでした
そのようにしても動きはしませんでしたが、
それはターミナルからの接続の仕様らしいと分かったので、
別のキーを割りあてることにします
939:名無しさん@お腹いっぱい。
07/08/26 22:06:20
man ascii
で出てくるコントロールコード以外の
コントロールキーの組み合わせ以外は
端末じゃ動かないよ。
940:名無しさん@お腹いっぱい。
07/08/26 22:09:03
まちがえた。以外が一つ多かった。
941:名無しさん@お腹いっぱい。
07/08/28 01:55:47
(func "/usr/bin/emacs" "/")
=> ("usr" "bin" "emacs")
こんな感じで、文字列からトークンを抽出する好い奴を
何方か識りませぬか?
942:名無しさん@お腹いっぱい。
07/08/28 02:03:17
普通に1文字ずつチェックすれば良いじゃない。
943:名無しさん@お腹いっぱい。
07/08/28 03:14:56
split-string
944:名無しさん@お腹いっぱい。
07/08/28 19:47:13
>>943
幸あれ。
やっぱりあるよね。token で探してたよ
>>942
普通?とりあえずこんなん書いてた
(lambda (string delimiter)
(let* ((iter (lambda (str dlm lst)
(if (and (string-match dlm str) (substring str (1+ (string-match dlm str)) nil))
(funcall iter
(and (string-match dlm str) (substring str (1+ (string-match dlm str)) nil))
dlm
(cons (substring str 0 (string-match dlm str)) lst))
(cons (substring str 0 (string-match dlm str)) lst)))))
(funcall iter string delimiter ())))
945:名無しさん@お腹いっぱい。
07/10/27 01:27:05
下記のような独自スクリプトのメジャーモードを作っています。
function:
if hoge == 0 {
hogehoge;
}
elseif hoge ==1 {
if hoge2 == 0 {
hogehoge2;
}else{
hogehoge3;
}
}
end;
階層は上記のif文のみです。
自動インデントをつけたいのですがどうすればいいでしょうか?
946:945
07/10/28 08:47:43
補足です。generic-x.elを使って作っています。
947:名無しさん@お腹いっぱい。
07/10/30 10:08:00
buffer-local-variableなるものがあるそうですが、
.emacs.elなどでsetq-defaultで設定した値は、
新しいバッファを作る度にバッファごとの値のコピーが作られてしまうんでしょうか。
カスタマイズ性から見るとsetq-defaultの方が使い易そうなのですが、
パフォーマンスに悪影響がでないか心配なんです。
948:名無しさん@お腹いっぱい。
07/10/30 20:29:39
make-variable-buffer-local されてるような変数の話だよね。
これは setq とかで書き換えた時点で、その buffer に local な変数が作られるってシステム。
書き換えるまではどの buffer でも初期値を参照してて、 setq-default はこの初期値を書き換える。
それ自体がコピーの原因になったりはしないはず。
949:名無しさん@お腹いっぱい。
07/11/16 08:26:40
call-processとかの外部コマンド呼び出し関数で
コマンドの出力(標準出力)を文字列もしくは文字列リストで
返すようなものってないでしょかね?
いちいちバッファに出すのがとても無駄に感じる時がある
950:名無しさん@お腹いっぱい。
07/11/16 22:17:04
set-process-filter
951:名無しさん@お腹いっぱい。
07/11/29 10:04:56
みなさん、乙です。
コードの中で読み易さを上げるためダブルクオート中の文字列を改行して書きたいのですが、
その改行自体はコード上では無効にしたいのですが、どうすればいいですか?
例
(message "
listA,
listB,
listC")
これが以下のようにmini-buffer に出力して貰いたいのですが、
listA,listB,listC
そんな方法ありますか?
952:名無しさん@お腹いっぱい。
07/11/29 11:08:37
>>951
(message (concat
"listA,"
"listB,"
"listC"))
953:名無しさん@お腹いっぱい。
07/11/29 12:39:04
>>951
(message "\
listA,\
listB,\
listC")
954:名無しさん@お腹いっぱい。
07/11/30 05:59:54
>>952, 953
サンクス。C と同じことできたのね。試せよオレ。