[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 03/27 08:34 / Filesize : 205 KB / Number-of Response : 769
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Emacs Lisp 3



1 名前:デフォルトの名無しさん [2007/10/09(火) 05:39:53 ]
Emacs Lisp の専用スレ。
少数派による互助を中心に、初心者の相談も気が向けば受け付けます。
単なる Emacs ユーザーは別板の Emacs 関連スレにどうぞ。

過去スレ
Emacs Lisp
pc2.2ch.net/test/read.cgi/tech/1004551074/
Emacs Lisp 2
pc11.2ch.net/test/read.cgi/tech/1068467385/

関連スレ
Emacs part 22
pc11.2ch.net/test/read.cgi/unix/1180828013/
【叩かれて】Emacs Lisp道場【強くなれ】
pc11.2ch.net/test/read.cgi/unix/1063880951/
Lisp Scheme Part18
pc11.2ch.net/test/read.cgi/tech/1186922295/

29 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 09:05:50 ]
>>27
仕様バグ。使い方は
(setq test (func test 3 x t))
でないとダメ。
なぜなら0番目に挿入がありえるから。

30 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 04:04:57 ]
>>29
???

そういうこともあるから値返してんじゃないの?
どのへんがバグなのか分からないオレははんぶん素人です。


31 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 13:25:22 ]
変更箇所を色分けするhighlight-changes-modeで、
保存のたびに色が変化する(tomato→black)ようにしたくて、以下を.emacsに書いたのですが、エラーが出てしまいます。
小関氏の『入門Meadow/Emacs』に載っているソースを真似たのですが、どこが問題なのでしょうか?
よろしくお願いします。

●.emacs
(setq highlight-changes-colours
      (let ((r 255)(g 99)(b 71) ret) ;初期値tomato
(while (> (+ r g b) 0) ;だんだん色褪せる
 (setq ret (append ret (list (format "#%02x%02x%02x" r g b))))
 (setq r (* (/ r 10) 8)
g (* (/ g 10) 8) 
b (* (/ b 10) 8)))
ret))

●エラー
Wrong type argument: symbolp, (* (/ b 10) 8)

32 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 14:07:35 ]
じっと目を凝らしても君には見えないんだろうな。

33 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:21:51 ]
>>31
Emacsが日本語でやさしく教えてくれるようになるまで別のもの使っときw

34 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:35:30 ]
>>31
setqのgの後ろに幽霊が居るぞ


35 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 20:41:01 ]
develockで赤くしました。

36 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 15:44:35 ]
develockって一度有効にしちゃったらoffにできないよね……

37 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:23:27 ]
バージョンが古いんじゃないの?



38 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:30:05 ]
と思ったら、なんか変だね…

39 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 17:03:58 ]
関数内で、自身の関数名を取得する方法はありますか?

40 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:17:53 ]
backtrace-frame()

41 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:18:00 ]
>>40
(defun hoge()
(interactive)
(setq self (second (backtrace-frame 3)))
(message "%s" self)
)

お、できた。
サンクス

42 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 17:30:07 ]
let使えよ
selfが汚染されるだろ

43 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 23:27:54 ]
変数 arg が string で空ではない事を判定するのは
こんな感じだと思うんですが

(and (stringp arg) (not (string= arg "")))

これに相当する標準のコマンドってありますか?

44 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 23:34:22 ]
(equal arg "")じゃダメなん?

45 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 23:37:09 ]
ああnonempty stringで真にしたいのか。ない、そんなの。

46 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:30:34 ]
lisp のファイル内に時々 ^L (Control-L) だけの行があるけど
あれ何のためにあるの?

47 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 04:11:13 ]
改ページ



48 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 10:15:45 ]
Lispに限らず見かけるけど。

a2ps-j とかはそれを認識して改ページしてくれるので、
見やすくするために入れる。

49 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:19:31 ]
EmacsのCソースコードにも入ってるよ。
一つのソースファイルをいくつかのセクションに分けたいときに使ってるね。
Emacsではbackword-page (C-x [), forward-page (C-x ])でページ単位で移動できる。

50 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:51:29 ]
>>47-49
なるほど。勉強になりました。


51 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 02:29:22 ]
文字列を N 回結合する関数ってありますか?

(defun foo (str num)
(let (i result)
(dotimes (i num result)
(setq result (concat result str)))))

こんなのを作るしかないんですかね?

52 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 02:48:27 ]
ないんじゃないかな、こんなのやってみたけど
(defun X (s n) (apply 'concat (make-list n s)))

53 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:10:46 ]
>>52
おお、素晴らしい。
そっちの方が色々応用できそうですね。


54 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:21:42 ]
>> 53
カキコしたあと思い出したんだけど、前スレで同じ質問あったな。いくつかレスがついてる。
pc11.2ch.net/test/read.cgi/tech/1068467385/936
> perl の x 演算子みたいな関数って無い?
> make-string の文字列版というか、
> (hogefunc 3 "abc")
> => "abcabcabc"
> みたいなやつ。


55 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:31:06 ]
>>53
mapconcat の方がいろいろ対応できるよ

56 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:36:39 ]
>>54
確認しました。 ありがとうございます。

941 :デフォルトの名無しさん:2007/09/08(土) 00:20:18
ということは、まとめると
(mapconcat 'identity (make-vector 3 "abc") nil)
が一番速いのかね

>>55
みたいですね。
こういうコードをさらっと書けるように修行します。

57 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 08:20:28 ]
(reduce 'concat (make-vector 3 "abc")) ;; ==> "abcabcabc"

ぱっとみて思いついた。



58 名前:Zeno ◆5nZQbNmQPs [2008/03/28(金) 09:47:16 ]
>>57
でもそれは >>51 のように順々に concat していくのと同様だから遅すぎである。

(reduce 'concat (make-vector 10000 "abc"))
Time: 5182 ms

(mapconcat 'identity (make-vector 10000 "abc") nil)
Time: 2 ms


59 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 10:29:12 ]
>>58
さっさと本スレで初心者にやさしく答えてあげてください。

60 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 22:07:36 ]
こっちの方が速かった。
(mapconcat (lambda (x) "abc") (make-bool-vector 10000 nil) nil)

くり返し回数が十分大きい場合はこっちのが速い
(with-temp-buffer
(let* ((n 10000) (s "abc") (l nil))
(while (/= n 0)
(setq l (cons (= 1 (logand n 1)) l))
(setq n (lsh n -1)))
(while (progn (if (car l) (insert s)) (setq l (cdr l)))
(insert-buffer-substring (current-buffer) (point-min) (point-max)))
(buffer-string)))


61 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 22:50:02 ]
>>60
思いつく柔軟さはいいと思うけど、
そんなコード氾濫してたら嫌だというのが正直なとこだな

62 名前:デフォルトの名無しさん [2008/03/29(土) 14:02:44 ]
ならinline functionにすればいいじゃない

63 名前:デフォルトの名無しさん [2008/04/19(土) 05:38:06 ]
Perlの
$foo =~ s/abc/def/;
みたいにして変数の中身を正規表現を使って置換することはEmacsLispで出来ますか?
perfume-replaceをどう使っていいのか分かりません

64 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 06:58:41 ]
>>63
replace-regexp-in-string

65 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 06:58:49 ]
>>63
replace-regexp-in-string でいいんじゃね? と思ったが、
s/abc/def/ じゃなくて s/abc/def/g になっちまうな。

(let ((foo "abc123abc"))
(setq foo (replace-regexp-in-string "abc" "def" foo)))
⇒ "def123def"

replace-match なら s/abc/def/ になるかな。

(let ((foo "abc123abc"))
(string-match "abc" foo)
(setq foo (replace-match "def" nil nil foo)))
⇒ "def123abc"

66 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 07:09:01 ]
>>65
あー s/abc/def/gでいいんです。すいません
とりあえずreplace-regexp-in-stringとstring-matchの使い方を覚えます
どうもありがとうございました

67 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 07:34:32 ]
ヘルプでcount-mathesの説明を見るとhow-manyのアライアスだということで
how-manyのソースを見てみたところ

(defun how-many (regexp &optional rstart rend)

と、引数を3つしかとらないみたいなのですが
バッファ内で(how-many "aa" nil nil nil)と引数を4つ渡して評価しても何故か
普通に動作します。
どうして引数を4つ渡しても動作するんでしょうか?
emacsのバージョンは22です



68 名前:67 mailto:sage [2008/04/27(日) 07:50:01 ]
すみません
使ってるバージョン(22)と見たソースのバージョン(21)が異なってただけでした。orz
22のソースだとちゃんと引数は4になってました。

あともう1つわからない点があって、22のcount-matchesの説明をc-h fで見ると
the function behaves in all respects has if it had been called interactively.
という英文があるんですが、これはどういう意味なんでしょうか?
特にin all respects has という部分がわかりません。


69 名前:Zeno ◆5nZQbNmQPs [2008/04/27(日) 08:12:30 ]

>>68
その英文は少々不自然である。 例えばそれは

if interactive is t, the function behaves as if it had been called interactively (in every respect).
(もし `interactive' が t であるならば、この関数は interactive に呼ばれた時と同じ動作をする。)

と訂正されるべきだろう。 "has" は "as" であって、単純なタイポである。


70 名前:67 mailto:sage [2008/04/27(日) 08:23:11 ]
>>69
変な英文だと思ったらtypoだったんですね。
わかりました、ありがとうございます。

71 名前:Zeno ◆5nZQbNmQPs [2008/04/27(日) 08:40:00 ]
>>70
貢献できて嬉しいよ。


72 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 03:42:36 ]
関数のカリー化はできないのでしょうか?

73 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 03:52:54 ]
プ

74 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:39:14 ]
emacs lisp からcommon lispのcl-whoなどのパッケージを使う方法ないでしょうか?

75 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 15:16:22 ]

Google Desktop の検索結果に time というプロパティがあり、それを通常の日付/時間表示に変換する方法が分かりません。どうすればいいのでしょうか?

;Google Deskitop の time の値(milie second): 128542440648970000

; 試してみたこと。
; current-time-string に渡すため (high low)のフォーマットにしようとこころみた。
(let* ((second 128542440648970)
(high (/ second 65535))
(low (logand second 65535)))
(List high low))

;こんな結果になる。
(-380 28938)



76 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 19:21:47 ]
(let* ((second "128542440648970")
(high (calc-eval (concat second " / 65535")))
(low (calc-eval (concat "and(" second ",65535"))))
(list high low))
=> ("1961431916.52" "28938")
で結果は正しい?

77 名前:デフォルトの名無しさん [2008/05/08(木) 12:32:31 ]
>>76
レスありがとう。

'high' が integer じゃないって怒られた。だめみたいです。



78 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 13:15:07 ]
それくらい自分で型変換しようぜ…

79 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 14:11:31 ]
>(concat second " / 65535")
65535 じゃなくて 65536 じゃないか?


80 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 16:53:42 ]
emacs21 --batch --eval "(hoge ...) "
の出力が日本語を含むリストのはずなのですが
\222 が連続して並んでます
nkfでも変換できないみたいです
どうすれば普通の日本語にできるのでしょうか?


81 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 17:05:32 ]
>>80
--batch の出力は必ず iso-2022 になるはず。

82 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 18:02:06 ]
emacsで.emacs.elファイルが開かれている場合、閉じるときにeval(してエラーがあれば警告し)たいのですが、良い方法をお分かりの方、教えてくださると幸いです。

ちなみに、
www.jaist.ac.jp/~n-yoshi/tips/junk_elisp.html#bytecompile
の、保存時に自動バイトコンパイルするよう設定を参考に、(byte-compile-file "~/.emacs.el")を(eval-current-buffer)に書き換えたりしてみたのですが、それだと、Emacsが重くなってダメでした。
高林哲氏のauto-save-buffersを使っているせいもあるんでしょうが。

83 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 22:45:10 ]
>>82
その真上にある終了時に byte-compile ってやつはダメなの?

84 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 02:51:56 ]
>>82
kill-buffer-query-functions で eval してはどうでしょうか。

(add-to-list 'kill-buffer-query-functions
(lambda ()
(when (string= (expand-file-name "~/.emacs.el")
(buffer-file-name))
(eval-buffer))
t))


85 名前:82 mailto:sage [2008/05/12(月) 05:10:30 ]
>>84 的確なレスありがとうございます。
さっそく試したところ、うまいこと動きました。

ただ、やはり、バッファ終了時ではなく、手動保存時に
add-hookすることができればそれがベストかなと、
思い直した次第です。

つまり、'after-save-hookだとauto-save時にも適用されてしまいますが、自分でC-x C-sした時だけeval-bufferするようなことって、できますでしょうか?

たびたびすいませんです。これで最後の質問にいたします。

86 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 08:28:30 ]
>>85
eval-bufferして本来の動作をするようなelispを定義して
C-xC-s のコマンドに上書きすればいいだけじゃないか。

87 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 08:28:31 ]
そういうコマンド書いて C-x C-s に割り当てればいいんじゃないかな。



88 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 08:58:59 ]
>>85
interactive-p で auto-save かどうかを判定できるかも。


89 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 09:30:03 ]
選択範囲内のすべての行の先頭にタブを入れたいのですが,
どうすればいいですか?

わかる方がいましたら教えてください。

90 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 09:43:01 ]
>>89
マークして C-x r t C-q TAB RET
基本的な操作は本スレで質問しような。

91 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:52:28 ]
>>81
なぜかうちの環境ではならない
ubuntu7.10


92 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 12:03:29 ]
>>90
そんな長いコマンドがちょっといやで,
C-c C-tあたりでできるようにしたいです




93 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:28:35 ]
>>92
じゃあチラシの裏に書く前にさっさとそうしてください。

94 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 07:24:04 ]
opensuse11 初心者だけど、manページが文字化けする。。。。

95 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 09:18:57 ]
elispでもマクロがあるんだねぇ。しらなかった。試しに作ったけど

(defmacro definsert (name str)
(let ((dstr (gensym)) (len (gensym)))
`(defun ,name ()
(let* ((,dstr (concat ,str ,str)) (,len (length ,str)))
(insert ,dstr)
(backward-char ,len)))))

( definsert insert-double-aho "aho")
(insert-double-aho) => ahoaho カーソルの位置 最初のahoの後ろ

インデントは適当になおしてね。また、これは車輪の再発明でinsert-pairが
標準であることを付け加えておきますね。

96 名前:デフォルトの名無しさん [2008/09/28(日) 07:16:03 ]
一行コピーの一番エレガントな実装を教えてください。
取り合えず手元にあるものではこんな感じ。

(defun duplicate-line (n)
(interactive "p")
(save-excursion
(copy-region-as-kill (line-beginning-position)
(progn (forward-line 1) (point)))
(dotimes (i n)
(yank))))

ちなみに、コピー後のカーソル位置は任意です。(カラムが移動するのはイヤン)


97 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 08:05:33 ]
;; エレガントかどうか知らんけど、最終行でも動作が変わらないようにしてみました
(defun duplicate-line (n)
(interactive "p")
(save-excursion
(let ((str (concat (buffer-substring (line-beginning-position)
(line-end-position))
"\n")))
(forward-line)
(when (= (line-end-position)
(point-max))
(insert "\n"))
(dotimes (i n)
(insert str)))))



98 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 10:44:45 ]
(fset 'duplicate-line
[?\C-a ?\C- ?\C-e escape ?w ?\C-m ?\C-y ?\C-a ?\C-p])

99 名前:96 mailto:sage [2008/09/28(日) 11:13:49 ]
ありがとうございます。

>>97
確かに最終行が改行で終わってないと動作がおかしいですが、
ある意味正しいというか、あまりないことなので現状でも
いいかなという気もします…

>>98
マクロも考えたんですが、カーソルのカラム位置が移動しちゃうのと
一回のUndoで元に戻らないのがちょっと微妙です。


100 名前:96のお父さん [2008/09/28(日) 11:34:40 ]

(insert (save-excursion (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))


101 名前:96のお父さん [2008/09/28(日) 11:36:45 ]
失礼。
× (insert (save-excursion (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))
○ (save-excursion (insert (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))

どっちでもいいけどな。


102 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 13:26:48 ]
質問です。

grep-find で、あちこちの .svnディレクトリ以下を無視したいのですが、
参考:.svnを除外してfindする
snak.tdiary.net/20081008.html#p02

今は毎回、-name .svn -prune -o を手で付け加えていて面倒なのです。

そこで、デフォルトでこのオプションが追加されるようにしたいのですが、で
きたらgrep.elはそのままで、.emacs.el で設定したいのです。どうしたら良い
でしょうか?


103 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 13:35:06 ]
なんか自己解決しました。grep-findじゃなくてrgrepだと.svnディレクトリを
デフォルトで無視してくれてるみたいです。
もっと調べてから質問するべきでした。すみません。


104 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 14:24:45 ]
すみません、>>102-103です。
Emacs本スレに書いたつもりの誤投稿でした。本当にごめんなさい。

105 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 11:27:34 ]
Emacs Lispでwgetみたいなことはできますか?

106 名前:デフォルトの名無しさん [2008/12/03(水) 15:34:26 ]
質問です。
x と lst が与えられたとき、x を lst から取りだす CAR と CDR の適用列を返す
関数 co を定義しなさい。 coは、そのような適用列が存在しない場合は NIL を
返すものとする。

107 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 15:43:05 ]
>>106
> x と lst が与えられたとき、x を lst から取りだす CAR と CDR の適用列を返す
> 関数 co を定義しなさい。
この文章は 命令 とか 指示 とかいった文章で
> coは、そのような適用列が存在しない場合は NIL を返すものとする。
この文章は 補足 とか 追加説明 とかいった文章だな。

で質問は何?



108 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:02:51 ]
;; >>106 エスパーして作ってみた
(mapc 'require (cl el-expectations))

(defun co (x lst &optional acc)
(assert (listp lst))
(macrolet
((recur (&rest lst) `(co ,@lst)))
(let ((cur (car lst)))
(cond ((null cur) nil)
((and (atom cur)) (if (eq x cur) (cons 'car acc)
(recur x (cdr lst) (cons 'cdr acc))))
((listp cur) (or (recur x (car lst) (cons 'car acc))
(recur x (cdr lst) (cons 'cdr acc))))
(t (error "unexpected lst: %s" cur))))))
;; test cases
(expectations
(error (co 'a '()))
(expect (co 'not-found '()))
(expect (co 'a '(a)) '(car))
(expect (co 'b '(a b c)) '(car cdr))
(expect (co 'c '(a b c)) '(car cdr cdr))
(expect (co 'x '((x) a b c)) '(car car))
(expect (co 'x '((a b c x) d e f)) '(car cdr cdr cdr car))
(expect (co 'x '(a b (c x d) e f)) '(car cdr car cdr cdr)))

109 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:04:03 ]
(mapc 'require '(cl el-expectations))



110 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 18:41:44 ]
>>106
どこの学校の宿題 ?

111 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:04:29 ]
戸塚ヨットスクール

112 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:40:53 ]
;; とりあえず質問者からの動作報告求む
(defun* co (x lst &optional (compare 'eq))
"COMPAREで比較関数を指定できるようにしてみた。
引数無しでは`eq'を使って比較する。"
(assert (listp lst))
(labels ((f (lst acc)
(let ((cur (car lst)))
(cond ((null cur) nil)
((and (atom cur)) (if (funcall compare x cur) (cons 'car acc)
(f (cdr lst) (cons 'cdr acc))))
((listp cur) (or (f (car lst) (cons 'car acc))
(f (cdr lst) (cons 'cdr acc))))
(t (error "unexpected lst: %s" cur))))))
(f lst '())))
;; てすけ
(expectations
(error (co 'a '()))
(expect (co 'not-found '()))
(expect (co 'a '(a)) '(car))
(expect (co 'b '(a b c)) '(car cdr))
(expect (co 'c '(a b c)) '(car cdr cdr))
(expect (co 'x '((x) a b c)) '(car car))
(expect (co 'x '((a b c x) d e f)) '(car cdr cdr cdr car))
(expect (co 'x '(a b (c x d) e f)) '(car cdr car cdr cdr))
(expect (co "foo" '("bar" "foo") 'string=) '(car cdr)))

113 名前:デフォルトの名無しさん [2008/12/04(木) 15:17:06 ]
遅くなりました106です。
関数coを定義しなさいという問題でした。

みなさんのおかげできました。
ありがとうございました。



114 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 16:07:00 ]
質問をさせてください。
read-string等でminibufferから読み込みをしている最中にC-x C-bとかすると
(if enable-recursive-minibuffers
    (error "Command attempted to use minibuffer while in minibuffer")
   (error "Cannot switch buffers in minibuffer window"))
なんですが
condition-caseでは捕まえられないし(switch-to-buffer中のエラー?)
*Backtrace*でqを押すとread-stringが戻る事無くトップレベルに返ってしまいます。
こういう場合はどう対処すればよいのでしょうか?
非同期プロセスと通信するプログラムを書いているので
いきなりtop-levelに返ってもらっては困るのです。
よろしくお願いします。

115 名前:114 mailto:sage [2008/12/05(金) 16:18:25 ]
ifのthen式とelse式が逆でした

116 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:20:41 ]
すみません、
>>106>>108>>112
より簡単に書けませんか?
よく分かりません

117 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:50:38 ]
宿題をここで教えてもらうような人間が提出するには
コードが綺麗すぎて困っているのですね、わかります。



118 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:56:12 ]
(defun co (x lst)
(let ((f (lambda (node acc)
(cond ((eq node x) acc)
((consp node)
(or (funcall f (car node) (cons 'car acc))
(funcall f (cdr node) (cons 'cdr acc))))))))
(funcall f lst '())))

119 名前:デフォルトの名無しさん [2008/12/24(水) 16:57:33 ]
ある eval に時間のかかる式を
開発中に eval-buffer したときは eval せずに,
compile 時のみに eval したいんですが,
どうするんでしょうか?

(eval-when (compile) (hoge))

これはうまくいっていないように思う.
Emacs 22.


120 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 22:25:20 ]
eval-when-compile

121 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:44:53 ]
eval-when-compile は eval-buffer でも eval される.

質問の仕方を変えると, byte compiling 中のみ Non-NIL に
なる変数はどうすれば定義できるか?

(defvar hoge-byte-compiling-p ...)



122 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 09:15:49 ]
>>119>>121じゃ問題が全然違うだろ。

123 名前:デフォルトの名無しさん [2008/12/25(木) 12:25:52 ]
質問がへたでごめんなさい.
eval-when-compile は eval-buffer のときも byte-compile のときも eval されるが,
今どちらなのかを区別したいです.


124 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 16:32:59 ]
>>121
backtrace/backtrace-frame を使って byte-compile-form あたりの有無で判定
できると思う.


125 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 11:11:43 ]
大学2年です
春休みを使って、emacs lispを勉強して、より快適な環境を作り、雑多な手間を省きたいんですが
どのくらいのレベルに行けば、emacs lispを扱えるレベルと言えるんでしょうか?
現在、自分はレベル1でしょうか

実は、Pythonのほうが興味があって、Pythonのほうがメインの勉強だったりします
Pythonでも下記のリンクのようなことは、できそうですよね?
Lisp(emacs lispとの違いがまだよくわかっていませんが)のほうがスマートなんでしようか

古いネタですが、叩き台のネタに

Scheme:Schemeプログラマのレベル10
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3aScheme%a5%d7%a5%ed%a5%b0%a5%e9%a5%de%a4%ce%a5%ec%a5%d9%a5%eb10


126 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:23:43 ]
新しいmajor-modeを書いたり、標準のelispとか誰かが作ったelispのバグを取ったり拡張を書いたり
できるようになれば十分扱えてるといっていい状態だろうね
それ以外の項目については何が言いたいのかよくわからない

127 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:28:15 ]
Lispの方がスマートに解ける問題もあればPythonの方が良い場合もあるでそ。
なんとなく思いだしたのでこれ貼っとく。
ttp://www.aoky.net/articles/steve_yegge/tour_de_babel.htm



128 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 06:58:22 ]
>>127
リンク、サンクスです
この人の寸評だと、このころはRubyのほうが優れた言語とされていたんだね

elispで何ができるかというのは、漠然とだけど、掴めるんだけど
Schemeでなにができるかがよく掴めない(どういう用途に優れているとか)
単なる教養としての言語なのかな
言語仕様として一貫性があるとか、そんな感じなのかな

Scheme関連のチュートリアルを読んでみます

129 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 11:50:11 ]
一応言っておくけど、Lispを学びたいからEmacs Lispをやるっていうのなら、
括弧になれるとか入口程度に思っておいた方がいいよ。
Emacs Lispは、見た目、Lispなだけだから。
末尾再帰を最適化できないから、再帰で書くことが事実上できなかったり、色々とLispらしくないから。






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

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<205KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef