トップページunix
987コメント279KB

Emacs part13

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。NGNG
なかったので立てました。

僕はemacsが大好きなんですが、どうしたら良いでしょうか?
はっきり逝って愛してます。なるべくemacsタンと振れ合いたいし、
emacsタンをもっともっと知りたいです。
だから俺の質問にはすべて答えてください。初心者の質問にも答えてくだっさい。
好きです。僕はemacssが好きなんです。

てか、もっとemacs語ればいいのに。なんでemacsのスレは進行が遅いの?
みんな、もっと積極的に発言しましょう!!

Emacs part12 (前スレ)
http://pc5.2ch.net/test/read.cgi/unix/1083217601/
0966名無しさん@お腹いっぱい。2005/03/24(木) 01:00:13
みたいなものっつっても。仕様が不明確だろ。
0967名無しさん@お腹いっぱい。2005/03/24(木) 02:21:28
こんなのか。でも、こんなの使えねーな。

(defmacro define (name &rest body)
(cond ((listp name) ; (define (name arg...) ...)
`(progn
(defun ,(car name) ,(cdr name) ,@body)
(defvar ,(car name))
(setq ,(car name) (lambda ,(cdr name) ,@body))))
((symbolp name) ; (define name ...)
`(progn
(defvar ,name)
(setq ,name (progn ,@body))
(defalias ',name (progn ,@body))))))
0968名無しさん@お腹いっぱい。2005/03/24(木) 12:28:24
/      `'´  ヽr''´      ト. ト. i     i
 '    /        ト.   ー--Hi-H- l    |l
 i   /  ,   l  ,レl´!|    ,|,! / リ l |i |  |  ,l!      ほっほぅ〜だよぅ
 l.  ,'  i ___,,iレ'´l|. l }!/  //レ /|,! リ !  ,! /
  !  i   |  i !| /! l' /イ / 弋フ~厂/' /'/           ほっほぅ〜だよぅ
  l | i|!.  ! l.!_レっ´厂 ´    `¨, , 'イ、イ'′
  ll |lハ  ', l|^ー-‐'            jィl       ほっほぅ〜だよぅ
. . | !| ヽ.r‐v  ' '      r―1      / .|l
  . |l |  .{´(ゝ_       l.  j   ,.イ! ‖
.   |. |  l lー‐‐ .__    ヽ_'_,. ィl  l!.  |           メ / )`) )   ほっほぅ〜だよぅ
  .l |   !ハ   ヽl 、}` ̄ ̄ | l! l|  |  |         メ ////ノ
  l! | 〃|.ヽ   ヽヽ      !_l! l|  |.   l        メ /ノ )´`´/彡
     ! /,r''´:.l ヽ.  ', iー---‐'' >―‐- 、 !        /   ノゝ /       ほっほぅ〜だよぅ
     く:...:...:...! ',  i l` ̄ ̄'´:...:...:...:...:...:.ヽl      /| 、_,,ィ '__/,;'"´``';,.
  .  }:...ヽ:...:..|i i  | |:...:...:...:...:...:...:...:...:...:.....'l    /;;;;;;\ _/  |ニニニニ|
0969名無しさん@お腹いっぱい。2005/03/24(木) 17:50:15
きもい
0970名無しさん@お腹いっぱい。2005/03/24(木) 23:29:54
define あったって、末尾再帰しないから。
0971名無しさん@お腹いっぱい。2005/03/25(金) 08:07:16
>>967 あんがと
0972名無しさん@お腹いっぱい。2005/03/25(金) 11:37:33
(define (func arg1 arg2 . l) ...)
みたいなやつってなかったっけ?
0973名無しさん@お腹いっぱい。2005/03/25(金) 18:14:08
末尾再帰を while に置き換えるようなマクロ作ったら?
0974名無しさん@お腹いっぱい。2005/03/25(金) 20:36:24
難しそう。汎用的なのは例外を使わないと無理だろ。
ループを一重に限定できるならまだ簡単だけど。
それに相互再帰はトランポリンでも使わないと変換は諦めざるを得ない。
0975名無しさん@お腹いっぱい。2005/03/25(金) 21:08:06
そんなの
(f (g x))
=> (g_cps (lambda (x) (f_cps c x)) x)

f == (lambda (x) (h x))
=> f_cps == (lambda (c x) (lambda (h_cps c x)))

(while (functionp c)
(setq c (c)))
みたいに CPS 変換するだけじゃん。
0976名無しさん@お腹いっぱい。2005/03/25(金) 22:12:28
じゃあ>>975が作ってくれ。
0977名無しさん@お腹いっぱい。2005/03/26(土) 00:38:16
CPS に変換すると遅杉
(progn
(defun power (n x &optional r)
(setq r (or r 1))
(cond ((= x 0) r)
((= x 1) (* n r))
(t (power (* n n) (/ x 2) (* (power n (% x 2)) r)))))
(defun power_cps (c n x &optional r)
(setq r (or r 1))
(cond ((= x 0) `(lambda () (funcall ,c ,r)))
((= x 1) `(lambda () (funcall ,c ,(* n r))))
(t `(lambda ()
(power_cps (lambda (y)
(power_cps ,c ,(* n n) ,(/ x 2) (* ,r y)))
,n ,(% x 2))))))
(defun run_power (n x) (power n x))
(defun run_power_cps (n x)
(let ((c (power_cps (lambda (x) x) n x)))
(while (functionp c) (setq c (funcall c)))
c))
(dolist (f '(power power_cps run_power run_power_cps)) (byte-compile f))
(elp-instrument-list '(run_power run_power_cps))
(let ((n 10.0) (x 100))
(dotimes (i 1000)
(run_power n x)
(run_power_cps n x)))
(elp-results))
Function Name Call Count Elapsed Time Average Time
============= ========== ============ ============
run_power_cps 1000 0.1459280000 0.0001459280
run_power 1000 0.0115380000 1.153...e-05
0978名無しさん@お腹いっぱい。2005/03/26(土) 11:19:02
な、なっちゃん…
0979名無しさん@お腹いっぱい。2005/03/26(土) 12:32:37
>>977
Function Name Call Count Elapsed Time Average Time
============= ========== ============ ============
run_power_cps 1000 0.1459280000 0.0001459280
run_power 1000 0.0115380000 1.153...e-05

↑は何使用して得た結果?
0980名無しさん@お腹いっぱい。2005/03/26(土) 13:01:16
>>979
>>977 を elisp で評価した結果。
navi2ch では使えない C-xC-eできないけど。
0981名無しさん@お腹いっぱい。2005/03/26(土) 14:04:06
↓次スレ
0982名無しさん@お腹いっぱい。2005/03/26(土) 14:05:47


0983名無しさん@お腹いっぱい。2005/03/26(土) 14:43:11



0984名無しさん@お腹いっぱい。2005/03/26(土) 14:49:34
Emacs part15
http://pc8.2ch.net/test/read.cgi/unix/1111816102/
0985名無しさん@お腹いっぱい。2005/03/26(土) 20:39:16
>>984
Z
0986名無しさん@お腹いっぱい。2005/03/26(土) 21:20:56
質問です。

occurなどをかけたときに、デフォルトだと画面が横に2分割されますが、
これをデフォルトで縦方向に分割されるようにするにはどうしたらよいのでしょうか?
教えて下さい。
0987名無しさん@お腹いっぱい。2005/03/26(土) 22:15:09
window.cの display-buffer() で
window = Fsplit_window (window, Qnil, Qnil);
となってるからどうしようもないのでは?
レス数が950を超えています。1000を超えると書き込みができなくなります。