[表示 : 全て 最新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

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


905 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 02:05:17 ]
cl は宗教上の理由でちょっと……。

906 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 02:09:23 ]
自分も書いてみた。リストしか考慮してない。
あんまり慣れてないからどっかまずいところあるかも・・・(自分への免罪符

(defun my-mapcar (func list)
  (defun my-mapcar-iter (func list rtn)
    (if (null list)
        rtn
      (my-mapcar-iter func (cdr list)
                      (setq rtn (cons (funcall func (car list)) rtn)))))
  (my-mapcar-iter func list '()))


907 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 02:11:39 ]
defunの中でdefunするのはじめて見た。

908 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 02:11:55 ]
あー、 reverse すんの忘れたorz

909 名前:名無しさん@お腹いっぱい。 [2007/05/29(火) 02:18:25 ]
Schemer の方ですか? Emacs Lisp じゃー再帰は実用的じゃないお。
しかも defun は internal define と違ってグローバルだし…。

910 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 02:23:05 ]
>>898の質問者はもうダメだろうね。レポートは突破できても試験は無理そうだ……。
授業二三回でればいいだろうになぁ。まったく聞いてなかったんだろうな。授業料無駄だったね。

911 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/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 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 07:07:10 ]
>>905
改宗すればおk

913 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 10:07:37 ]
cl 使えば flet で関数内関数使えるよ。



914 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/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 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/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 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/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 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/02(土) 08:50:13 ]
ずびまぜん。

elispで 16進数文字列を整数に変換する楽な方法ってありません?
(hoge "64") => 100
ってなるような。
(defun hoge (s)
(string-to-number (concat "#x" s)))
とかじゃ 0が返ってきてしまいました。


918 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/02(土) 08:59:28 ]
(defun hage (s)
(string-to-number s 16))

(hage "64")

100 ウマー

919 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/02(土) 09:16:44 ]
おお、そんなところに &optional があったとは...
infoをもっとちゃんと読むべきでした。
どうも有難うございました。


920 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/02(土) 16:36:52 ]
>>868-

921 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/02(土) 21:22:45 ]
知ってる人も多いだろうけど C-h f めちゃくちゃ便利だよ。
関数定義してるソースの該当部分にも飛べる。

922 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/03(日) 00:27:47 ]
emacs22でも、mode-infoも動いてくれるしね。


923 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/10(日) 19:00:25 ]
あるオブジェクトに対し、car-safeが非nilとなる時
cdrでなくcdr-safeを使うべき局面ってある?



924 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/10(日) 23:36:38 ]
>>923
car-safe が non-nil なら対象は list ってことだから、そんな局面はない、
と思う。


925 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 22:28:03 ]
同じ名前の変数 (defvar hoge)と関数 (defun hoge ())が定義されているとき、
変数だけ定義を消すことってできますか?

(unintern 'hoge) だと、両方消えてしまうので。


926 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 22:36:59 ]
makunbound
c.f.
fmakunbound

927 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 22:45:39 ]
ぬりがとう。

ところでこれ何て読むのですか?
(エフ)メイク・アン・バウンドでいいんかな?

思い出されるcreat()。


928 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 23:18:45 ]
>ところでこれ何て読むのですか?
なんでしょうね?

>思い出されるcreat()。
なるw

929 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/29(金) 01:06:36 ]
defconstしてるものには、時に大文字のシンボルを使ってみるのも一興かなと
ふと思った。
たぶんウザいだろうけど。

930 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/07(火) 22:22:42 ]
EmacsがXで動いているときだけ、
C-zでアイコン化しない様にしたいと思っています。
Xで動いているのかterminalで動いているのか判別するには
どうしたらよいのでしょうか。

931 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/07(火) 22:29:27 ]
window-system

932 名前:930 mailto:sage [2007/08/07(火) 22:33:57 ]
>931
ありがとうございます。
とりあえず、
(if window-system (global-set-key "\C-z" 'shell))
としてみました。


933 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/21(火) 05:23:38 ]
M-x shell
を.emacsファイルの読み込み時に動作させるにはどうしたらよいのでしょうか。



934 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/21(火) 10:02:38 ]
本当に文字通りそうしたいのならば
(shell)
と書く。

935 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/21(火) 12:13:59 ]
>>934
できました。ありがとうございました。

936 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/26(日) 17:18:02 ]
(global-set-key [?\C-;] 'なにか)
とか
(global-set-key "\C;" 'なにか)
とやってもエラーがでて動きません。
;をjにしたら動いたので”なにか”が間違っていることはいないと思います。

C-;やC-, C-. へのバインドを指定するにはどうしたらよいのでしょうか
どなたか教えていただけないでしょうか?


937 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/26(日) 19:00:19 ]
[(control ?;)]

設定程度の質問なら、次回からelispスレじゃなくてemacsスレ行きな。

938 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/26(日) 21:58:08 ]
>>937
ありがとうございます
今後は気をつけます
どうもすいませんでした

そのようにしても動きはしませんでしたが、
それはターミナルからの接続の仕様らしいと分かったので、
別のキーを割りあてることにします

939 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/26(日) 22:06:20 ]
man ascii
で出てくるコントロールコード以外の
コントロールキーの組み合わせ以外は
端末じゃ動かないよ。

940 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/26(日) 22:09:03 ]
まちがえた。以外が一つ多かった。

941 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/28(火) 01:55:47 ]
(func "/usr/bin/emacs" "/")
=> ("usr" "bin" "emacs")

こんな感じで、文字列からトークンを抽出する好い奴を
何方か識りませぬか?

942 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/28(火) 02:03:17 ]
普通に1文字ずつチェックすれば良いじゃない。

943 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/28(火) 03:14:56 ]
split-string



944 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/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 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/27(土) 01:27:05 ]
下記のような独自スクリプトのメジャーモードを作っています。
function:
if hoge == 0 {
hogehoge;
}
elseif hoge ==1 {
if hoge2 == 0 {
hogehoge2;
}else{
hogehoge3;
}
}
end;
階層は上記のif文のみです。
自動インデントをつけたいのですがどうすればいいでしょうか?


946 名前:945 [2007/10/28(日) 08:47:43 ]
補足です。generic-x.elを使って作っています。


947 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/30(火) 10:08:00 ]
buffer-local-variableなるものがあるそうですが、
.emacs.elなどでsetq-defaultで設定した値は、
新しいバッファを作る度にバッファごとの値のコピーが作られてしまうんでしょうか。

カスタマイズ性から見るとsetq-defaultの方が使い易そうなのですが、
パフォーマンスに悪影響がでないか心配なんです。

948 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/30(火) 20:29:39 ]
make-variable-buffer-local されてるような変数の話だよね。
これは setq とかで書き換えた時点で、その buffer に local な変数が作られるってシステム。
書き換えるまではどの buffer でも初期値を参照してて、 setq-default はこの初期値を書き換える。
それ自体がコピーの原因になったりはしないはず。

949 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/16(金) 08:26:40 ]
call-processとかの外部コマンド呼び出し関数で
コマンドの出力(標準出力)を文字列もしくは文字列リストで
返すようなものってないでしょかね?
いちいちバッファに出すのがとても無駄に感じる時がある

950 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/16(金) 22:17:04 ]
set-process-filter

951 名前:名無しさん@お腹いっぱい。 [2007/11/29(木) 10:04:56 ]
みなさん、乙です。

コードの中で読み易さを上げるためダブルクオート中の文字列を改行して書きたいのですが、
その改行自体はコード上では無効にしたいのですが、どうすればいいですか?


(message "
listA,
listB,
listC")

これが以下のようにmini-buffer に出力して貰いたいのですが、

listA,listB,listC

そんな方法ありますか?

952 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/29(木) 11:08:37 ]
>>951
(message (concat
"listA,"
"listB,"
"listC"))

953 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/29(木) 12:39:04 ]
>>951
(message "\
listA,\
listB,\
listC")




954 名前:名無しさん@お腹いっぱい。 [2007/11/30(金) 05:59:54 ]
>>952, 953
サンクス。C と同じことできたのね。試せよオレ。







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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