私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
【叩かれて】Emacs Lisp道場【強くなれ】
emacs スレッド一覧へ / emacs とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 : ○
レスフィルター : (試験中)
xyzzy は Common Lisp じゃない。cl ですら実装されてるのに
(mapcar (lambda (x) (typecase x
(integer "整数")
(string "文字列")
(t "その他")))
'(10 3.3 "ほげ"))
こんなのが動かないし。
(mapcar (lambda (x) (typecase x
(integer "整数")
(string "文字列")
(t "その他")))
'(10 3.3 "ほげ"))
こんなのが動かないし。
>>801
それだけ?他にもあるでしょ。おせーて。
それだけ?他にもあるでしょ。おせーて。
>>798
insert-file-contents系で分けて読むとか、catあたりをstart-processしてfilterで読むとか。
テキストの場合マルチバイト文字の切れ目の処理が必要になるとちょっといやらしいかも
insert-file-contents系で分けて読むとか、catあたりをstart-processしてfilterで読むとか。
テキストの場合マルチバイト文字の切れ目の処理が必要になるとちょっといやらしいかも
>>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#)))
適当だけど。
(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#)))
あらら。。もう一回。
(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#)))
(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#)))
未編集のリードオンリーのバッファ上で、何かあるタイミングで、
recenter すると変更フラグが立つことがある。
という現象に遭遇した人いないですか、とか聞いてみようと思った。
が、recenter の前に、(sit-for 0) を入れたら解決したみたい。
recenter すると変更フラグが立つことがある。
という現象に遭遇した人いないですか、とか聞いてみようと思った。
が、recenter の前に、(sit-for 0) を入れたら解決したみたい。
Emacs21とか22とかになると、デフォルトでいろんな機能が
組込まれてしまったので (occurとかgrepとか、検索もパワーアップしたり)、
新しい機能を作る機会が減って、最近このスレッドが寂しいのかなぁ、
などと思ったりした。
まとめサイトや紹介サイトも増えたしね。
ネタが出てくることを願って期待sage。
組込まれてしまったので (occurとかgrepとか、検索もパワーアップしたり)、
新しい機能を作る機会が減って、最近このスレッドが寂しいのかなぁ、
などと思ったりした。
まとめサイトや紹介サイトも増えたしね。
ネタが出てくることを願って期待sage。
>>809
すげぇ。すげぇよ、あんた。
すげぇ。すげぇよ、あんた。
この板の趣旨とは、ちょっと内容がずれてますが、教えて下さい。
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 に渡されるときに壊れると解釈していますが、どうすればいいのでしょう?
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
レスサンクス。
表のあとに\マークってことは、「てすと表\示」って感じにですか?
日本語文字は何を入れてもだめなので、それでもだめだと思います。
気になるのは、エンコーディングがどうやって認識されるかです。
elisp -> shell -> perl と引数として指定された文字列が渡されると思いますが、
このプログラム間のエンコードは、どうやって指定するのかが、よく分かりません。
おそらく日本語 OS 下では、デフォルトが shift_jis になると思いますが、
これは、elisp からシェルの間も同じかな?
レスサンクス。
表のあとに\マークってことは、「てすと表\示」って感じにですか?
日本語文字は何を入れてもだめなので、それでもだめだと思います。
気になるのは、エンコーディングがどうやって認識されるかです。
elisp -> shell -> perl と引数として指定された文字列が渡されると思いますが、
このプログラム間のエンコードは、どうやって指定するのかが、よく分かりません。
おそらく日本語 OS 下では、デフォルトが shift_jis になると思いますが、
これは、elisp からシェルの間も同じかな?
process-coding-system とか coding-system-for-write とか?
emacs上でschemeの勉強しているんですが、
emacsのコメント行のインデントのしかたが気に入らないので
直したいと思っているのですが、
どこから始めたらいいのか、
さっぱり分かりません。
とりあえず
scheme-modeが定義されている場所の調べ方を教えていただけませんか?
emacsのコメント行のインデントのしかたが気に入らないので
直したいと思っているのですが、
どこから始めたらいいのか、
さっぱり分かりません。
とりあえず
scheme-modeが定義されている場所の調べ方を教えていただけませんか?
>>820
> scheme-modeが定義されている場所の調べ方を教えていただけませんか?
find-function
> emacsのコメント行のインデントのしかたが気に入らないので
確かに comment-dwin は腐ってるからな
> scheme-modeが定義されている場所の調べ方を教えていただけませんか?
find-function
> emacsのコメント行のインデントのしかたが気に入らないので
確かに comment-dwin は腐ってるからな
>>820
つ Gauche
つ Gauche
初歩的な質問で聞き難いのですが教えて下さい。
バッファ中の文章の特定の文字を置き換えるようなコードを
作りたいのですが、condを使うのかifとprognを使うのかよく分かりません。
たとえば、文章中の”Red Hat”なら”赤帽”、”Vine”なら”葡萄”、”Windows”なら
”窓”というようにバッファ中の文章を変えたいです。
バッファ中の文章の特定の文字を置き換えるようなコードを
作りたいのですが、condを使うのかifとprognを使うのかよく分かりません。
たとえば、文章中の”Red Hat”なら”赤帽”、”Vine”なら”葡萄”、”Windows”なら
”窓”というようにバッファ中の文章を変えたいです。
>>823
replace-stringじゃだめなん?
replace-stringじゃだめなん?
基本事項なんだぜ?
(info "(elisp)Conditionals")
(info "(elisp)Combining Conditions")
(info "(elisp)Conditionals")
(info "(elisp)Combining Conditions")
レス下さった方々、どうもありがとうございました。
非常に無駄な処理をしていますが、望む結果が得られました。
(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)))
過去ログ読んで勉強してきます。
非常に無駄な処理をしていますが、望む結果が得られました。
(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)))
過去ログ読んで勉強してきます。
`XWindows' も `X窓' になりそうだし、`divine' も `di葡萄' になりそう。
(後者は `case-fold-search' の値によるけど)
(後者は `case-fold-search' の値によるけど)
自分で頑張れてるのだから、頭が悪いとは思わないけどな。
やりつけないことは何でも最初は大変だ。
>>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'なり)に置換するという方法。
これだとバッファの先頭から検索を始めるのが一回で済む。
やりつけないことは何でも最初は大変だ。
>>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'なり)に置換するという方法。
これだとバッファの先頭から検索を始めるのが一回で済む。
>>840
This function is usually the wrong thing to use in a Lisp program.
This function is usually the wrong thing to use in a Lisp program.
(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))))))
(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))))))
オレも make-hash-table ってのははじめてみたけど、
elispのハッシュってのはcdr要素数1のalistと解釈して、だいたいおk?
elispのハッシュってのはcdr要素数1のalistと解釈して、だいたいおk?
論理的にはOKだけど、計算量がぜんぜん違うよ?
何かアルゴリズムの入門書を読んだほうがよさげ
何かアルゴリズムの入門書を読んだほうがよさげ
最近知ったんだけど、バイトコンパイルした結果って
直接実行もできるんだね。
(defun fn(x)
(* x 2))
(byte-compile 'fn)
#[(x) "\211\\\301\\\207" [x 0] 2]
(#[(x) "\211\\\301\\\207" [x 0] 2] 10)
20
直接実行もできるんだね。
(defun fn(x)
(* x 2))
(byte-compile 'fn)
#[(x) "\211\\\301\\\207" [x 0] 2]
(#[(x) "\211\\\301\\\207" [x 0] 2] 10)
20
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs スレッド一覧へ
みんなの評価 : ○類似してるかもしれないスレッド
- 【熱く】お前のEmacsにはまった理由【語れ】 (577) - [36%] - 2021/8/28 17:30 ○
- 「Emacsは消滅すべき」、ゴスリング氏 (127) - [17%] - 2023/1/12 15:45
トップメニューへ / →のくす牧場書庫について