のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:126,962,890人
昨日: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
    801 : 名無しさん@お腹 - 2006/05/12(金) 08:14:54 (+43,-30,-64)
    xyzzy は Common Lisp じゃない。cl ですら実装されてるのに
    (mapcar (lambda (x) (typecase x
    (integer "整数")
    (string "文字列")
    (t "その他")))
    '(10 3.3 "ほげ"))
    こんなのが動かないし。
    802 : 名無しさん@お腹 - 2006/05/13(土) 20:51:42 (+62,+29,-16)
    >>801
    それだけ?他にもあるでしょ。おせーて。
    803 : 名無しさん@お腹 - 2006/05/14(日) 11:40:22 (-1,-29,-8)
    -batch
    で別個に動かすのはどうでしょう?
    804 : 名無しさん@お腹 - 2006/05/14(日) 14:05:01 (+4,-30,-58)
    >>798
    insert-file-contents系で分けて読むとか、catあたりをstart-processしてfilterで読むとか。

    テキストの場合マルチバイト文字の切れ目の処理が必要になるとちょっといやらしいかも
    805 : 名無しさん@お腹 - 2006/06/24(土) 12:07:52 (+18,-30,-144)
    >>801
    適当だけど。

    (defmacro?typecase?(check?&rest?type-list)
    ??(let?((#1=#:case))
    ???????(dolist?(item?(reverse?type-list)?#1#)
    ?????????(push?(if?(eq?(car?item)?t)
    ???????????????????`(t?,(cadr?item))
    ?????????????????`((subtypep?(type-of?,check)
    ?????????????????????????????',(car?item))
    ?????????????????????????????,(cadr?item)))
    ???????????????#1#))
    ????(cons?'cond?#1#)))
    806 : 805 - 2006/06/24(土) 12:12:09 (+3,-30,-118)
    あらら。。もう一回。

    (defmacro typecase (check &rest type-list)
    (let ((#1=#:case))
    (dolist (item (reverse type-list) #1#)
    (push (if (eq (car item) t)
    `(t ,(cadr item))
    `((subtypep (type-of ,check)
    ',(car item))
    ,(cadr item)))
    #1#))
    (cons 'cond #1#)))
    807 : 名無しさん@お腹 - 2006/08/30(水) 05:12:50 (+3,-29,-79)
    未編集のリードオンリーのバッファ上で、何かあるタイミングで、
    recenter すると変更フラグが立つことがある。
    という現象に遭遇した人いないですか、とか聞いてみようと思った。
    が、recenter の前に、(sit-for 0) を入れたら解決したみたい。
    808 : 名無しさん@お腹 - 2006/10/15(日) 22:07:25 (+53,+20,-45)
    Emacs21とか22とかになると、デフォルトでいろんな機能が
    組込まれてしまったので (occurとかgrepとか、検索もパワーアップしたり)、
    新しい機能を作る機会が減って、最近このスレッドが寂しいのかなぁ、
    などと思ったりした。

    まとめサイトや紹介サイトも増えたしね。
    ネタが出てくることを願って期待sage。
    809 : 名無しさん@お腹 - 2006/10/21(土) 21:51:36 (+91,+29,-26)
    ちまちまと一年以上かけて作ってきたが、とうとうやる気が無くなったので晒すテスト。
    使い方はソース読んでくれ。

    http://grinocat.googlepages.com/yawn.el
    810 : 名無しさん@お腹 - 2006/10/21(土) 23:01:47 (+1,-21,+0)
    (・∀・)申!
    811 : 名無しさん@お腹 - 2006/10/22(日) 04:18:27 (+70,+29,+0)
    >>809
    すげぇ。すげぇよ、あんた。
    812 : 名無しさん@お腹 - 2006/10/27(金) 01:00:59 (-1,-29,-4)
    w3みたいなもの?
    動かせない(´;ω;`)
    813 : <sage - 2006/11/06(月) 19:07:50 (+10,-30,-239)
    この板の趣旨とは、ちょっと内容がずれてますが、教えて下さい。

    shell-command-to-string 関数を使って、perl を呼び出そうとしていますが、
    日本語引数を渡すとどこの段階でか分かりませんが、文字がばけます。

    (shell-command-to-string "c:/Perl/bin/perl.exe e:/work/0my/scripts/test.pl てすと表示")

    で、「test.pl」 では、

    my $outfile = "e:/work/0my/scripts/test.txt";
    my $out;

    open ($out, "> $outfile") || die ("couldn't open $outfile to write into.");
    print ($out $ARGV [0]);
    close($out);

    で、"test.txt" を shift_jis とかで開いても化けています。

    DOS 上で日本語引数は、問題なく処理されるので、Elisp から、
    perl に渡されるときに壊れると解釈していますが、どうすればいいのでしょう?
    814 : 名無しさん@お腹 - 2006/11/06(月) 21:51:47 (+12,-23,-16)
    >>813
    > perl に渡されるときに壊れると解釈していますが、どうすればいいのでしょう?
    表の後に\を付ける、とか?
    815 : sage - 2006/11/07(火) 00:20:27 (+4,-29,-141)
    >>814
    レスサンクス。

    表のあとに\マークってことは、「てすと表\示」って感じにですか? 
    日本語文字は何を入れてもだめなので、それでもだめだと思います。

    気になるのは、エンコーディングがどうやって認識されるかです。
    elisp -> shell -> perl と引数として指定された文字列が渡されると思いますが、
    このプログラム間のエンコードは、どうやって指定するのかが、よく分かりません。

    おそらく日本語 OS 下では、デフォルトが shift_jis になると思いますが、
    これは、elisp からシェルの間も同じかな?
    816 : 名無しさん@お腹 - 2006/11/07(火) 00:31:14 (+2,-30,-38)
    process-coding-system とか coding-system-for-write とか?
    817 : 名無しさん@お腹 - 2006/11/07(火) 00:45:40 (+2,-30,-21)
    >>816 さんありがとう
    (setq coding-system-for-write 'sjis)
    でうまくいきました。m(_ _)m
    819 : 名無しさん@お腹 - 2006/11/07(火) 01:04:52 (+44,+16,-18)
    >>818
    この変数に対して値をグローバルに設定すべきではないということですね。
    了解、let を使います。
    820 : 名無しさん@お腹 - 2006/12/13(水) 14:58:06 (+11,-29,-41)
    emacs上でschemeの勉強しているんですが、
    emacsのコメント行のインデントのしかたが気に入らないので
    直したいと思っているのですが、
    どこから始めたらいいのか、
    さっぱり分かりません。

    とりあえず
    scheme-modeが定義されている場所の調べ方を教えていただけませんか?
    821 : 名無しさん@お腹 - 2006/12/13(水) 15:38:18 (+4,-30,-48)
    >>820
    > scheme-modeが定義されている場所の調べ方を教えていただけませんか?
    find-function

    > emacsのコメント行のインデントのしかたが気に入らないので
    確かに comment-dwin は腐ってるからな
    822 : 名無しさん@お腹 - 2006/12/14(木) 22:57:50 (-4,-29,+1)
    >>820
    つ Gauche
    823 : 名無しさん@お腹 - 2007/01/14(日) 02:16:27 (+37,-29,-67)
    初歩的な質問で聞き難いのですが教えて下さい。
    バッファ中の文章の特定の文字を置き換えるようなコードを
    作りたいのですが、condを使うのかifとprognを使うのかよく分かりません。
    たとえば、文章中の”Red Hat”なら”赤帽”、”Vine”なら”葡萄”、”Windows”なら
    ”窓”というようにバッファ中の文章を変えたいです。
    824 : 名無しさん@お腹 - 2007/01/14(日) 02:19:30 (+5,-29,-2)
    >>823
    replace-stringじゃだめなん?
    825 : 名無しさん@お腹 - 2007/01/14(日) 02:26:41 (+14,-15,-7)
    複数の文字列を一括して置換とかかな
    826 : 名無しさん@お腹 - 2007/01/14(日) 02:33:07 (+4,-30,-36)
    >>824
    検索関数(search-forward)などでマッチした文字列を
    replace-matchなどで変えようと思ったのですが、条件分岐が
    よくわからなくて・・・

    >>825
    たぶん、そんな感じです。
    827 : 名無しさん@お腹 - 2007/01/14(日) 02:36:59 (+57,+29,-10)
    まずは仕様をきっちり決めれ。
    「たぶん、そんな感じ」じゃなんだかわからん。
    828 : 名無しさん@お腹 - 2007/01/14(日) 02:42:02 (-2,-30,-50)
    基本事項なんだぜ?
    (info "(elisp)Conditionals")
    (info "(elisp)Combining Conditions")
    829 : 名無しさん@お腹 - 2007/01/14(日) 02:49:31 (+57,+29,+0)
    ありがとうございます。もう少し読んでみます。
    830 : 823 - 2007/01/14(日) 03:25:03 (+11,-30,-274)
    レス下さった方々、どうもありがとうございました。
    非常に無駄な処理をしていますが、望む結果が得られました。

    (defun change-font ()
    (interactive)
    (let ((p (point)))
    (goto-char (point-min))
    (while (not (eobp))
    (if (search-forward "Led Hat" nil t) (replace-match "赤帽")
    (forward-line 1)))
    (goto-char (point-min))
    (while (not (eobp))
    (if (search-forward "Vine" nil t) (replace-match "葡萄")
    (forward-line 1)))
    (goto-char (point-min))
    (while (not (eobp))
    (if (search-forward "Windows" nil t) (replace-match "窓")
    (forward-line 1)))
    (goto-char p)))

    過去ログ読んで勉強してきます。
    831 : 名無しさん@お腹 - 2007/01/14(日) 05:53:52 (+97,+29,-4)
    一行に2回出てきたらだめじゃね?
    832 : 名無しさん@お腹 - 2007/01/14(日) 11:47:06 (+87,-29,-21)
    検索語を \\| で分けて match-string で抜き出し cond で振り分けろ
    833 : 823 - 2007/01/14(日) 13:38:34 (+75,+29,-5)
    >>831
    いえ、ちゃんと置き換えてくれました。

    >>832
    ご教授ありがとうございます。しばらくにらめっこします。
    834 : 名無しさん@お腹 - 2007/01/14(日) 14:59:07 (+38,+15,+1)
    教授じゃなくて教示
    835 : 名無しさん@お腹 - 2007/01/15(月) 00:23:16 (+52,-26,-8)
    > >>833
    > > 一行に2回出てきたらだめじゃね?
    >>831
    > いえ、ちゃんと置き換えてくれました。

    ホントに?
    試していないけど VineVine とかいう行があったらダメっぽく見える。

    836 : 名無しさん@お腹 - 2007/01/15(月) 01:09:45 (+49,-30,-41)
    `XWindows' も `X窓' になりそうだし、`divine' も `di葡萄' になりそう。
    (後者は `case-fold-search' の値によるけど)
    837 : 823 - 2007/01/15(月) 19:50:39 (+64,+29,-13)
    >>835
    >>836
    ご指摘ありがとうございます。例外処理(?)を考えていませんでした。
    まだ>>832さんの方法で出来ていないしどんだけバカなんだろ私・・・
    838 : 名無しさん@お腹 - 2007/01/16(火) 06:46:15 (+12,-30,-255)
    自分で頑張れてるのだから、頭が悪いとは思わないけどな。
    やりつけないことは何でも最初は大変だ。
    >>832, >>836とも正規表現が必要だし。

    まず>>830の改善点としては(forward-line 1)、これは置換が終わったら次へ進む
    ってことで入れたのだろうけど、次の行じゃなくて置換したテキストの直後に
    移動すれば十分な筈。ところがreplace-match自身が

    Leave point at the end of the replacement text.

    という動作をしてくれる。

    >>836は、正規表現を使うと「単語の先頭」という位置にだけ合うパターンが
    使えるのでそれを使う。必要なら同様に「単語の末尾」というのも使える。
    正規表現による検索はre-search-forward.

    ここまでで一応、要求は満たされるんじゃないのかな。


    >>832は正規表現を使うと「AまたはBまたはC」にマッチするパターンというのが
    書ける。それで検索して、その後でそれがAだったかBだったかCだったかを調べ、
    対応する文字列(A'なりB'なりC'なり)に置換するという方法。
    これだとバッファの先頭から検索を始めるのが一回で済む。
    839 : 名無しさん@お腹 - 2007/01/16(火) 08:06:14 (-1,-29,-3)
    save-excursion も教えたれよ。
    840 : 名無しさん@お腹 - 2007/01/16(火) 10:05:53 (+2,-29,+0)
    replace-regexp を使う。
    841 : 名無しさん@お腹 - 2007/01/16(火) 11:37:35 (-1,-29,-6)
    >>840
    This function is usually the wrong thing to use in a Lisp program.
    842 : 名無しさん@お腹 - 2007/01/16(火) 12:59:54 (+3,-30,-254)
    (defun foo (alist)
      (let ((regexp (regexp-opt (mapcar #'car alist) 'words))
            (table (make-hash-table :test 'equal))
            (normalize (if case-fold-search #'downcase #'identity)))
        (dolist (pair alist)
          (puthash (funcall normalize (car pair)) (cdr pair) table))
        (save-excursion
          (while (re-search-forward regexp nil t)
            (let ((new (gethash (funcall normalize (match-string 0)) table)))
              (replace-match new))))))
    843 : 名無しさん@お腹 - 2007/01/16(火) 15:22:17 (-1,-29,-29)
    ほとんどの漢字も普通にword syntaxだから全然だめだな
    844 : 名無しさん@お腹 - 2007/01/16(火) 16:47:50 (+57,+29,-16)
    俺、elispでハッシュとか使ったことねーや
    845 : 名無しさん@お腹 - 2007/01/17(水) 00:50:09 (-2,-30,-43)
    オレも make-hash-table ってのははじめてみたけど、
    elispのハッシュってのはcdr要素数1のalistと解釈して、だいたいおk?
    846 : 名無しさん@お腹 - 2007/01/17(水) 01:15:55 (+57,+29,-13)
    論理的にはOKだけど、計算量がぜんぜん違うよ?
    何かアルゴリズムの入門書を読んだほうがよさげ
    847 : 名無しさん@お腹 - 2007/01/17(水) 02:15:15 (+3,-30,-42)
    最近知ったんだけど、バイトコンパイルした結果って
    直接実行もできるんだね。

    (defun fn(x)
    (* x 2))
    (byte-compile 'fn)
    #[(x) "\211\\\301\\\207" [x 0] 2]

    (#[(x) "\211\\\301\\\207" [x 0] 2] 10)
    20
    848 : 名無しさん@お腹 - 2007/01/17(水) 05:48:58 (+38,+15,-14)
    ワロタ
    つくづくエディタなんだな
    849 : 名無しさん@お腹 - 2007/01/17(水) 06:23:03 (+38,+20,+0)
    つまらん
    850 : 名無しさん@お腹 - 2007/01/17(水) 14:28:00 (+57,+29,-29)
    お前等の中にシリコンバレーで働いてる人いる?
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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