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

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


809 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/21(土) 21:51:36 ]
ちまちまと一年以上かけて作ってきたが、とうとうやる気が無くなったので晒すテスト。
使い方はソース読んでくれ。

ttp://grinocat.googlepages.com/yawn.el

810 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/21(土) 23:01:47 ]
ネ(・∀・)申!


811 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/22(日) 04:18:27 ]
>>809
すげぇ。すげぇよ、あんた。

812 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/27(金) 01:00:59 ]
w3みたいなもの?
動かせない(´;ω;`)

813 名前:<sage> [2006/11/06(月) 19:07:50 ]
この板の趣旨とは、ちょっと内容がずれてますが、教えて下さい。

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 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/06(月) 21:51:47 ]
>>813
> perl に渡されるときに壊れると解釈していますが、どうすればいいのでしょう?
表の後に\を付ける、とか?

815 名前:sage [2006/11/07(火) 00:20:27 ]
>>814
レスサンクス。

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

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

おそらく日本語 OS 下では、デフォルトが shift_jis になると思いますが、
これは、elisp からシェルの間も同じかな?

816 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/07(火) 00:31:14 ]
process-coding-system とか coding-system-for-write とか?

817 名前:名無しさん@お腹いっぱい。 [2006/11/07(火) 00:45:40 ]
>>816 さんありがとう
(setq coding-system-for-write 'sjis)
でうまくいきました。m(_ _)m



818 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/07(火) 00:48:11 ]
>>817
letで束縛
ttp://www.fan.gr.jp/~ring/doc/elisp_20/elisp_33.html#SEC542

819 名前:名無しさん@お腹いっぱい。 mailto: [2006/11/07(火) 01:04:52 ]
>>818
この変数に対して値をグローバルに設定すべきではないということですね。
了解、let を使います。

820 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/12/13(水) 14:58:06 ]
emacs上でschemeの勉強しているんですが、
emacsのコメント行のインデントのしかたが気に入らないので
直したいと思っているのですが、
どこから始めたらいいのか、
さっぱり分かりません。

とりあえず
scheme-modeが定義されている場所の調べ方を教えていただけませんか?


821 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/12/13(水) 15:38:18 ]
>>820
> scheme-modeが定義されている場所の調べ方を教えていただけませんか?
find-function

> emacsのコメント行のインデントのしかたが気に入らないので
確かに comment-dwin は腐ってるからな

822 名前:名無しさん@お腹いっぱい。 [2006/12/14(木) 22:57:50 ]
>>820
つ Gauche

823 名前:名無しさん@お腹いっぱい。 [2007/01/14(日) 02:16:27 ]
初歩的な質問で聞き難いのですが教えて下さい。
バッファ中の文章の特定の文字を置き換えるようなコードを
作りたいのですが、condを使うのかifとprognを使うのかよく分かりません。
たとえば、文章中の”Red Hat”なら”赤帽”、”Vine”なら”葡萄”、”Windows”なら
”窓”というようにバッファ中の文章を変えたいです。

824 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/14(日) 02:19:30 ]
>>823
replace-stringじゃだめなん?

825 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/14(日) 02:26:41 ]
複数の文字列を一括して置換とかかな

826 名前:名無しさん@お腹いっぱい。 [2007/01/14(日) 02:33:07 ]
>>824
検索関数(search-forward)などでマッチした文字列を
replace-matchなどで変えようと思ったのですが、条件分岐が
よくわからなくて・・・

>>825
たぶん、そんな感じです。

827 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/14(日) 02:36:59 ]
まずは仕様をきっちり決めれ。
「たぶん、そんな感じ」じゃなんだかわからん。



828 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/14(日) 02:42:02 ]
基本事項なんだぜ?
(info "(elisp)Conditionals")
(info "(elisp)Combining Conditions")


829 名前:名無しさん@お腹いっぱい。 [2007/01/14(日) 02:49:31 ]
ありがとうございます。もう少し読んでみます。

830 名前:823 mailto:sage [2007/01/14(日) 03:25:03 ]
レス下さった方々、どうもありがとうございました。
非常に無駄な処理をしていますが、望む結果が得られました。

(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 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/14(日) 05:53:52 ]
一行に2回出てきたらだめじゃね?

832 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/14(日) 11:47:06 ]
検索語を \\| で分けて match-string で抜き出し cond で振り分けろ

833 名前:823 mailto:sage [2007/01/14(日) 13:38:34 ]
>>831
いえ、ちゃんと置き換えてくれました。

>>832
ご教授ありがとうございます。しばらくにらめっこします。

834 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/14(日) 14:59:07 ]
教授じゃなくて教示


835 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/15(月) 00:23:16 ]
> >>833
> > 一行に2回出てきたらだめじゃね?
>>831
> いえ、ちゃんと置き換えてくれました。

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



836 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/15(月) 01:09:45 ]
`XWindows' も `X窓' になりそうだし、`divine' も `di葡萄' になりそう。
(後者は `case-fold-search' の値によるけど)

837 名前:823 mailto:sage [2007/01/15(月) 19:50:39 ]
>>835
>>836
ご指摘ありがとうございます。例外処理(?)を考えていませんでした。
まだ>>832さんの方法で出来ていないしどんだけバカなんだろ私・・・



838 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/16(火) 06:46:15 ]
自分で頑張れてるのだから、頭が悪いとは思わないけどな。
やりつけないことは何でも最初は大変だ。
>>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 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/16(火) 08:06:14 ]
save-excursion も教えたれよ。

840 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/16(火) 10:05:53 ]
replace-regexp を使う。

841 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/16(火) 11:37:35 ]
>>840
This function is usually the wrong thing to use in a Lisp program.

842 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/16(火) 12:59:54 ]
(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 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/16(火) 15:22:17 ]
ほとんどの漢字も普通にword syntaxだから全然だめだな

844 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/16(火) 16:47:50 ]
俺、elispでハッシュとか使ったことねーや

845 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/17(水) 00:50:09 ]
オレも make-hash-table ってのははじめてみたけど、
elispのハッシュってのはcdr要素数1のalistと解釈して、だいたいおk?


846 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/17(水) 01:15:55 ]
論理的にはOKだけど、計算量がぜんぜん違うよ?
何かアルゴリズムの入門書を読んだほうがよさげ

847 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/17(水) 02:15:15 ]
最近知ったんだけど、バイトコンパイルした結果って
直接実行もできるんだね。

(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 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/17(水) 05:48:58 ]
ワロタ
つくづくエディタなんだな

849 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/17(水) 06:23:03 ]
つまらん

850 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/17(水) 14:28:00 ]
お前等の中にシリコンバレーで働いてる人いる?

851 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/17(水) 23:10:28 ]
emacsで文字のフォントの大きさを変えるにはどうしたらよいですか?


852 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/17(水) 23:41:26 ]
もしemacs lispがstatic scopeだったら果たしてどうだったろうか

853 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/21(日) 00:40:22 ]
>>851
fontset

854 名前:名無しさん@お腹いっぱい。 [2007/03/28(水) 18:57:13 ]
(゚Д゚≡゚д゚)

855 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/29(木) 01:39:37 ]
>>854
うちの .Xdefault には, 未だに
> Emacs.Font: fontset-12 bold
> Emacs.Fontset-0: -shinonome-gothic-bold-r-*-*-12-*-*-*-*-*-fontset-12 bold
> Emacs.Fontset-2: -shinonome-gothic-bold-r-*-*-14-*-*-*-*-*-fontset-14 bold
...
> Emacs.Fontset-11: -shinonome-gothic-medium-r-*-*-24-*-*-*-*-*-fontset-24 medium
てなものが残ってて機能しているが...


856 名前:名無しさん@お腹いっぱい。 [2007/04/12(木) 10:48:03 ]
emacs ilspでwebプログラミング可能?

857 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/12(木) 11:29:20 ]
>>856
「webプログラミング」っていうとどの辺の話?



858 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/12(木) 11:45:50 ]
ttp://www1.odn.ne.jp/ymtz/tips.html#wwwsvr

こういうことだったりして

859 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/12(木) 11:57:35 ]
AllegroServe とかそういう話かなぁ。
elisp じゃないけど。

860 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/12(木) 13:32:42 ]
elservなんてのがあったなー。
もっとまともなのも多分あるだろうけど興味無いので知らない。

861 名前:名無しさん@お腹いっぱい。 [2007/04/12(木) 15:16:27 ]
emacsがwebサーバーになるのですね。もはやなんでもありですね。
elispはphpで作成するのと同様のwebプログラミングは可能でしょうか?
掲示板とか、アンケートなど。



862 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/12(木) 15:18:15 ]
>>861
アクセスのたびに Emacs 呼ぶってこと?
まぁ不可能じゃないんじゃね。
やる気は起きないけど。

>>859 じゃだめなん?

863 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/13(金) 04:31:21 ]
単純にphpスクリプトを書けるか?と聞けば
遊ばれずに済んだであろう>>861


864 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/13(金) 09:45:15 ]
そういう質問じゃないっしょ。

865 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/13(金) 15:06:43 ]
>>861
もちろん同様のことは可能。もちろん同様にはできないけどな。

866 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/13(日) 16:17:55 ]
定期的に M-x hoge を実行するにはどうしたら良いのですか?
答えが駄目なら、誰かヒントだけでも教えてくれないでしょうか。

867 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/13(日) 17:55:49 ]
timer



868 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 01:21:02 ]
23
という数値を16進数数値として扱い、
"35"にする方法はどんなのがあるでしょうか?

(let ((n 23))
(format "%d" (string-to-number (number-to-string n) 16)))

これは思いつきましたが、もちょっと簡単にならんかな、と。


869 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 06:39:30 ]
じゅうぶんかんたんだとおもう

870 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 10:48:34 ]
>>868
#x23

871 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 11:08:26 ]
>>868
なんで元が数値なんだろ。
3a とかの入力は考えなくていいの?

872 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 20:18:46 ]
>>870
(read (concat "#x" n))
か。なんかびみょーに感じる。この表記がいけるのってemacs21以降あたり?

873 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 00:01:09 ]
数値を concat できたのか…


874 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 00:22:21 ]
ごめん。emacs21からはムリなはず。

875 名前:866 mailto:sage [2007/05/20(日) 00:46:22 ]
駄目だ分からない。
run-at-time 使おうにも hoge をどう指定したら良いのか不明……lisp は難しい orz
例えば、.emacs にどう書けば、自動で M-x hoge できますか? ; emacs の引数から起動するのではなくて。
あとは、start-process と while と sleep-for 辺りを組み合わせれば可能な気はするんだけど……さっぱり orz
週末に数時間しか PC に触れられないのは、現代社会をは思えない環境 orz

876 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 00:52:00 ]
run-with-timer 使うんじゃないの?
何がわからないのかがよくわからない

877 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 00:53:00 ]
もしかして M-x から指定してるものが関数名だってことを知らないとか?



878 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 03:58:00 ]
(setq hoge-timer (run-with-timer 0 1 'hoge))
(defun hoge ()
(interactive)
(message (current-time-string)))
(defun hoge-cancel ()
(interactive)
(cancel-timer hoge-timer))

M-x hoge
=>Sun May 20 03:56:18 2007

879 名前:lispp? [2007/05/20(日) 14:40:44 ]
LISPを学習して1週間目の者ですが、

(progn
(setq wara 10)
(setq waru 0)
(/ wara waru)
)
でエラーが発生します。

(if (equal waru 0)...)でなくて、catch??? throw???のような例外処理で対応したいのですが、
可能でしょうか?



880 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 14:50:53 ]
>>879
shakosv.sk.tsukuba.ac.jp/ShakoDoc/Editors/NEmacs/elisp-jman/html/eljman_104.html

881 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 17:00:06 ]
>>879
condition-case

elisp.infoのControl Structuresを参照。
Lispではcatch/throwの例外処理とsignal/condition-caseのエラー処理は別物
である点に留意されたし。

882 名前:名無しさん@お腹いっぱい。 [2007/05/20(日) 17:12:06 ]
xyzzy使っているのですが、 condition-caseで関数がないと表示されます。


883 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 17:17:31 ]
板違い

884 名前:名無しさん@お腹いっぱい。 [2007/05/28(月) 20:48:43 ]
EmacsでのLispのプログラムについての質問です。
リストAとして((a b c) (d e f) (g h i))というリストがあるとして、このリストの中の要素であるリストの
最後の要素を返す関数を作る場合どうしたらいいでしょうか?


885 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 21:33:40 ]
>>884
各要素の cdr を見ていって、それが nil なものを返せばいいんじゃないの。
そういう話でない?

886 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 21:37:09 ]
>>884
(car (last (car (last '((a b c) (d e f) (g h i))))))

887 名前:名無しさん@お腹いっぱい。 [2007/05/28(月) 21:47:12 ]
884の補足ですが、
リストAを引数として(c f i)を返すような関数を定義したいのです。
また、リストAの要素がもっと多い場合にも対応できるようにしたいのです。



888 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 21:52:54 ]
>>887
(mapcar (lambda (x) (car (last x))) A)

889 名前:名無しさん@お腹いっぱい。 [2007/05/28(月) 22:00:23 ]
>>888
見たことないコマンドが多いのですが・・・。
初心者なのでもう少し分かりやすくしていただけるとありがたいのですが。

890 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 22:16:26 ]
標準の関数くらい自分でしらべろよ。

891 名前:名無しさん@お腹いっぱい。 [2007/05/28(月) 22:17:51 ]
そういった関数を使わないで定義したいんです。

892 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 23:42:03 ]
lambda とか mapcar 使わないで lisp のプログラム書くのは
逆に難しいと思うぞ。

893 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 00:06:38 ]
それは無理な話だ

894 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 00:08:04 ]
ごめん
>>893>>891へね

895 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 00:11:56 ]
おk。mapcar も lambda も car も廃止してやったぞ。last は使わせてくれて…

(require 'cl)
(defun fun-887 (lst)
(loop for element in lst
collect (first (last element))))

last も禁止ならこうだ。

(require 'cl)
(defun fun-887 (lst)
(loop for element in lst
collect (first (reverse element))))


896 名前:名無しさん@お腹いっぱい。 [2007/05/29(火) 00:16:23 ]
>>895ありがとうございました
もう一つ聞きたいのは、数nとリストを引数として取り、
リストのn番目の要素を返す関数を定義したいのですが、
この関数を再帰を使って定義するにはどうしたらいいでしょう


897 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 00:24:12 ]
(defun list-ref (lis n)
(if (zerop n)
(car lis)
(list-ref (cdr lis) (- n 1))))



898 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 00:43:50 ]
んー?
ttp://questionbox.msn.co.jp/qa3033199.html

899 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 00:46:01 ]
最近なんでもかんでも聞く人多くない?


900 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 01:19:24 ]
mapcar を独自に定義しようとするとどう書ける?

901 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 01:29:48 ]
>>896
再帰使うまでもない。

(defun list-ref (lis n)
(nth (1- n) lis))

902 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 01:52:11 ]
(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 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 02:01:06 ]
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 ]
>>898 つうか、そゆのは大抵自分では考えないだろうし、調べないだろうし、向上心もないだろうし、礼儀も知らないだろうし、
人の忠告も聞かないだろうから。さっさと答を与えればそれ以上しつこく聞いてこない軽い荒らしだと思って対応するが吉。

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 と違ってグローバルだし…。






[ 続きを読む ] / [ 携帯版 ]

前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