のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,811人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

    emacs スレッド一覧へ / emacs とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    901 : 名無しさん@お腹 - 2007/05/29(火) 01:29:48 (+5,-30,-15)
    >>896
    再帰使うまでもない。

    (defun list-ref (lis n)
    (nth (1- n) lis))
    902 : 名無しさん@お腹 - 2007/05/29(火) 01:52:11 (+3,-30,-113)
    (defun my-mapcar (func list)
    (let ((rest list) (results ()))
    (while (not (null rest))
    (setq results (cons (funcall func (car rest)) results))
    (setq rest (cdr rest)))
    (nreverse results)))

    とかかな。
    903 : 名無しさん@お腹 - 2007/05/29(火) 02:01:06 (+3,-30,-76)
    setq とか cons を使いたくないんですとか来た場合に備えておこう。

    (require 'cl)
    (defun my-mapcar-2 (func lst)
    (loop for elem in lst
    collect (funcall func elem)))
    904 : 名無しさん@お腹 - 2007/05/29(火) 02:04:56 (+73,+30,-56)
    >>898 つうか、そゆのは大抵自分では考えないだろうし、調べないだろうし、向上心もないだろうし、礼儀も知らないだろうし、
    人の忠告も聞かないだろうから。さっさと答を与えればそれ以上しつこく聞いてこない軽い荒らしだと思って対応するが吉。
    905 : 名無しさん@お腹 - 2007/05/29(火) 02:05:17 (+79,+29,-2)
    cl は宗教上の理由でちょっと……。
    906 : 名無しさん@お腹 - 2007/05/29(火) 02:09:23 (+3,-30,-84)
    自分も書いてみた。リストしか考慮してない。
    あんまり慣れてないからどっかまずいところあるかも・・・(自分への免罪符

    (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 : 名無しさん@お腹 - 2007/05/29(火) 02:11:39 (-1,-29,+2)
    defunの中でdefunするのはじめて見た。
    908 : 名無しさん@お腹 - 2007/05/29(火) 02:11:55 (-1,-29,+0)
    あー、 reverse すんの忘れたorz
    910 : 名無しさん@お腹 - 2007/05/29(火) 02:23:05 (+72,+30,-25)
    >>898の質問者はもうダメだろうね。レポートは突破できても試験は無理そうだ……。
    授業二三回でればいいだろうになぁ。まったく聞いてなかったんだろうな。授業料無駄だったね。
    911 : 名無しさん@お腹 - 2007/05/29(火) 02:58:34 (+3,-30,-94)
    >>909
    最近、ちょっと scheme で遊んでたもので・・・。

    > Emacs Lisp じゃー再帰は実用的じゃないお。
    調べてみたところ、再帰回数が max-lisp-eval-depth で制限されてる、
    末尾再帰が最適化されない、のようなことがあるのですね。

    > しかも defun は internal define と違ってグローバルだし…。
    M-x help f で関数のリスト見たら、my-mapcar-iter があって驚きました。

    よくよく考えてみたら、setq はいらなかった。
    なんでつけたんだろう。
    まずいところ多すぎorz
    912 : 名無しさん@お腹 - 2007/05/29(火) 07:07:10 (+54,+21,+1)
    >>905
    改宗すればおk
    913 : 名無しさん@お腹 - 2007/05/29(火) 10:07:37 (-1,-29,-16)
    cl 使えば flet で関数内関数使えるよ。
    914 : 名無しさん@お腹 - 2007/05/29(火) 12:55:46 (+3,-30,-106)
    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 : 名無しさん@お腹 - 2007/05/29(火) 22:24:57 (+9,-30,-148)
    …再帰するなら labels じゃねーとダメなんじゃね? cl のバグ?
    ズバリこうだろ。while 版より短い!! 俺のバイク小屋ハァハァ

    (defun my-mapcar (func lst)
    (let ((result nil))
    (dolist (e lst)
    (push (funcall func e) result))
    (nreverse result)))
    916 : 名無しさん@お腹 - 2007/05/29(火) 22:27:10 (+4,-30,-118)
    なんとなく 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 : 名無しさん@お腹 - 2007/06/02(土) 08:50:13 (+3,-30,-77)
    ずびまぜん。

    elispで 16進数文字列を整数に変換する楽な方法ってありません?
    (hoge "64") => 100
    ってなるような。
    (defun hoge (s)
    (string-to-number (concat "#x" s)))
    とかじゃ 0が返ってきてしまいました。
    918 : 名無しさん@お腹 - 2007/06/02(土) 08:59:28 (-2,-30,-41)
    (defun hage (s)
    (string-to-number s 16))

    (hage "64")

    100 ウマー
    919 : 名無しさん@お腹 - 2007/06/02(土) 09:16:44 (+57,+29,-17)
    おお、そんなところに &optional があったとは...
    infoをもっとちゃんと読むべきでした。
    どうも有難うございました。
    920 : 名無しさん@お腹 - 2007/06/02(土) 16:36:52 (+55,+30,+0)
    921 : 名無しさん@お腹 - 2007/06/02(土) 21:22:45 (-1,-29,-25)
    知ってる人も多いだろうけど C-h f めちゃくちゃ便利だよ。
    関数定義してるソースの該当部分にも飛べる。
    922 : 名無しさん@お腹 - 2007/06/03(日) 00:27:47 (-1,-29,-3)
    emacs22でも、mode-infoも動いてくれるしね。
    923 : 名無しさん@お腹 - 2007/06/10(日) 19:00:25 (+2,-30,-28)
    あるオブジェクトに対し、car-safeが非nilとなる時
    cdrでなくcdr-safeを使うべき局面ってある?
    924 : 名無しさん@お腹 - 2007/06/10(日) 23:36:38 (-1,-29,-10)
    >>923
    car-safe が non-nil なら対象は list ってことだから、そんな局面はない、
    と思う。
    925 : 名無しさん@お腹 - 2007/06/27(水) 22:28:03 (+3,-30,-50)
    同じ名前の変数 (defvar hoge)と関数 (defun hoge ())が定義されているとき、
    変数だけ定義を消すことってできますか?

    (unintern 'hoge) だと、両方消えてしまうので。
    926 : 名無しさん@お腹 - 2007/06/27(水) 22:36:59 (-1,-29,+0)
    makunbound
    c.f.
    fmakunbound
    927 : 名無しさん@お腹 - 2007/06/27(水) 22:45:39 (+57,+29,-37)
    ぬりがとう。

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

    思い出されるcreat()。
    928 : 名無しさん@お腹 - 2007/06/27(水) 23:18:45 (+49,+21,-21)
    >ところでこれ何て読むのですか?
    なんでしょうね?

    >思い出されるcreat()。
    なるw
    929 : 名無しさん@お腹 - 2007/06/29(金) 01:06:36 (+57,+29,-21)
    defconstしてるものには、時に大文字のシンボルを使ってみるのも一興かなと
    ふと思った。
    たぶんウザいだろうけど。
    930 : 名無しさん@お腹 - 2007/08/07(火) 22:22:42 (+8,-29,-21)
    EmacsがXで動いているときだけ、
    C-zでアイコン化しない様にしたいと思っています。
    Xで動いているのかterminalで動いているのか判別するには
    どうしたらよいのでしょうか。
    931 : 名無しさん@お腹 - 2007/08/07(火) 22:29:27 (-2,-29,+0)
    window-system
    932 : 930 - 2007/08/07(火) 22:33:57 (-2,-30,-22)
    >931
    ありがとうございます。
    とりあえず、
    (if window-system (global-set-key "\C-z" 'shell))
    としてみました。
    933 : 名無しさん@お腹 - 2007/08/21(火) 05:23:38 (-1,-29,-25)
    M-x shell
    を.emacsファイルの読み込み時に動作させるにはどうしたらよいのでしょうか。
    934 : 名無しさん@お腹 - 2007/08/21(火) 10:02:38 (+23,-25,-29)
    本当に文字通りそうしたいのならば
    (shell)
    と書く。
    935 : 名無しさん@お腹 - 2007/08/21(火) 12:13:59 (+34,+3,+1)
    >>934
    できました。ありがとうございました。
    936 : 名無しさん@お腹 - 2007/08/26(日) 17:18:02 (+3,-30,-57)
    (global-set-key [?\C-;] 'なにか)
    とか
    (global-set-key "\C;" 'なにか)
    とやってもエラーがでて動きません。
    ;をjにしたら動いたので”なにか”が間違っていることはいないと思います。

    C-;やC-, C-. へのバインドを指定するにはどうしたらよいのでしょうか
    どなたか教えていただけないでしょうか?
    937 : 名無しさん@お腹 - 2007/08/26(日) 19:00:19 (+34,-29,-39)
    [(control ?;)]

    設定程度の質問なら、次回からelispスレじゃなくてemacsスレ行きな。
    938 : 名無しさん@お腹 - 2007/08/26(日) 21:58:08 (+67,+29,-33)
    >>937
    ありがとうございます
    今後は気をつけます
    どうもすいませんでした

    そのようにしても動きはしませんでしたが、
    それはターミナルからの接続の仕様らしいと分かったので、
    別のキーを割りあてることにします
    939 : 名無しさん@お腹 - 2007/08/26(日) 22:06:20 (-1,-29,-12)
    man ascii
    で出てくるコントロールコード以外の
    コントロールキーの組み合わせ以外は
    端末じゃ動かないよ。
    940 : 名無しさん@お腹 - 2007/08/26(日) 22:09:03 (+52,+29,-3)
    まちがえた。以外が一つ多かった。
    941 : 名無しさん@お腹 - 2007/08/28(火) 01:55:47 (-2,-30,-33)
    (func "/usr/bin/emacs" "/")
    => ("usr" "bin" "emacs")

    こんな感じで、文字列からトークンを抽出する好い奴を
    何方か識りませぬか?
    942 : 名無しさん@お腹 - 2007/08/28(火) 02:03:17 (+50,+15,-1)
    普通に1文字ずつチェックすれば良いじゃない。
    943 : 名無しさん@お腹 - 2007/08/28(火) 03:14:56 (+0,-29,+0)
    split-string
    944 : 名無しさん@お腹 - 2007/08/28(火) 19:47:13 (+6,-30,-199)
    >>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 : 名無しさん@お腹 - 2007/10/27(土) 01:27:05 (+13,-30,-105)
    下記のような独自スクリプトのメジャーモードを作っています。
    function:
    if hoge == 0 {
    hogehoge;
    }
    elseif hoge ==1 {
    if hoge2 == 0 {
    hogehoge2;
    }else{
    hogehoge3;
    }
    }
    end;
    階層は上記のif文のみです。
    自動インデントをつけたいのですがどうすればいいでしょうか?
    946 : 945 - 2007/10/28(日) 08:47:43 (-1,-29,-2)
    補足です。generic-x.elを使って作っています。
    947 : 名無しさん@お腹 - 2007/10/30(火) 10:08:00 (+3,-30,-113)
    buffer-local-variableなるものがあるそうですが、
    .emacs.elなどでsetq-defaultで設定した値は、
    新しいバッファを作る度にバッファごとの値のコピーが作られてしまうんでしょうか。

    カスタマイズ性から見るとsetq-defaultの方が使い易そうなのですが、
    パフォーマンスに悪影響がでないか心配なんです。
    948 : 名無しさん@お腹 - 2007/10/30(火) 20:29:39 (+3,-30,-114)
    make-variable-buffer-local されてるような変数の話だよね。
    これは setq とかで書き換えた時点で、その buffer に local な変数が作られるってシステム。
    書き換えるまではどの buffer でも初期値を参照してて、 setq-default はこの初期値を書き換える。
    それ自体がコピーの原因になったりはしないはず。
    949 : 名無しさん@お腹 - 2007/11/16(金) 08:26:40 (+3,-29,-46)
    call-processとかの外部コマンド呼び出し関数で
    コマンドの出力(標準出力)を文字列もしくは文字列リストで
    返すようなものってないでしょかね?
    いちいちバッファに出すのがとても無駄に感じる時がある
    950 : 名無しさん@お腹 - 2007/11/16(金) 22:17:04 (-1,-29,-2)
    set-process-filter
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について