<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Latest comments for language 'Emacs Lisp' on doukaku.org</title><link>http://ja.doukaku.org/lang/emacslisp/</link><description>Latest comments for language 'Emacs Lisp' on doukaku.org(long)</description><language>ja</language><lastBuildDate>Sat, 22 Nov 2008 20:32:01 -0000</lastBuildDate><item><title>emasaka's comment on 2^i * 3^j * 5^k なる整数
</title><link>http://ja.doukaku.org/comment/7682/</link><description>



&lt;a href="http://ja.doukaku.org/206/"&gt;2^i * 3^j * 5^k なる整数&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/206/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/206/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;#7671のExcelの解が面白かったので、GNU Emacsに移植してみました。ネタ実装です。&lt;/p&gt;
&lt;p&gt;できるだけプログラミング言語というよりエディターのマクロって感じの書きかたを目指しました。カラムの表現は面倒なのでS式にしちゃいましたが。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun hamming (num)
  (interactive (list (read-minibuffer &amp;quot;Number: &amp;quot; &amp;quot;100&amp;quot;)))
  (let ((n 1) (c 0))
    (switch-to-buffer &amp;quot;*Hamming*&amp;quot;)
    (erase-buffer)
    (insert &amp;quot;(nil 0 0 0)&amp;quot;)
    (beginning-of-buffer)
    (while (&amp;lt; c num)
      (unless (eolp)
        (save-excursion
          (let ((s (read (current-buffer))))
            (setq c (1+ c))
            (backward-kill-sexp)
            (prin1 (cons n (cdr s)) (current-buffer))
            (mapc (lambda (i)
                    (hamming::goto-line-force (* n i))
                    (if (eolp)
                        (prin1 (cons nil
                                     (mapcar (lambda (j)
                                               (+ (nth (/ (1+ j) 2) s)
                                                  (if (= i j) 1 0) ))
                                             &amp;#39;(2 3 5) ))
                               (current-buffer) )))
                  &amp;#39;(2 3 5) ))))
      (setq n (1+ n))
      (forward-line) ))
  (setq outline-regexp &amp;quot;([0-9]&amp;quot;)
  (outline-mode)
  (hide-body) )

(defun hamming::goto-line-force (n)
  (let ((r (goto-line n)))
    (unless (bolp) (insert ?\n))
    (while (&amp;lt; 0 r)
      (insert ?\n)
      (setq r (1- r) ))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7682/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7682/</guid></item><item><title>匿名's comment on LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする
</title><link>http://ja.doukaku.org/comment/7087/</link><description>



&lt;a href="http://ja.doukaku.org/196/"&gt;LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/196/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/196/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;コマンドラインから&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;emacs -Q --batch --eval &amp;#39;(print(upcase-initials&amp;quot;LL day and night&amp;quot;))&amp;#39;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7087/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7087/</guid></item><item><title>leque's comment on LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする
</title><link>http://ja.doukaku.org/comment/6995/</link><description>



&lt;a href="http://ja.doukaku.org/196/"&gt;LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/196/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/196/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;バッファに文字列を書いた状態で。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(mark-whole-buffer)(upcase-initials-region)
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/6995/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/6995/</guid></item><item><title>kozima's comment on コード圧縮
</title><link>http://ja.doukaku.org/comment/6810/</link><description>



&lt;a href="http://ja.doukaku.org/189/"&gt;コード圧縮&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/189/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/189/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;昔ゴルフ用に書いたものを書き直しました。Emacs のバッファを書き換えます。対象言語は Common Lisp で、バッファのモードは lisp-mode と仮定しています。&lt;/p&gt;
&lt;dl class="docutils"&gt;
&lt;dt&gt;出力例:&lt;/dt&gt;
&lt;dd&gt;(defun mylib-compress-need-space-p()(cond((or(bobp)(eobp))nil)((string-match&amp;quot;[&amp;quot;'(),`]&amp;quot;(string(following-char)))nil)((looking-back&amp;quot;#[0-9]+#&amp;quot;)nil)((looking-back&amp;quot;#\\.&amp;quot;)t)((string-match&amp;quot;[&amp;quot;()]&amp;quot;(string(preceding-char)))nil)(t)))&lt;/dd&gt;
&lt;/dl&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun mylib-compress-region (&amp;amp;optional start end)
  (interactive &amp;quot;r&amp;quot;)
  (save-restriction
    (when (and start end)
      (narrow-to-region start end)
      (goto-char (point-min)))
    (loop
      do (delete-region (point)
                        (progn (while (forward-comment 1)) (point)))
      until (or (eobp) (= (following-char) ?\)))
      if (mylib-compress-need-space-p)
      do (insert &amp;quot; &amp;quot;)
      if (looking-at &amp;quot;\\(#&amp;#39;?\\|[&amp;#39;`]\\|,@?\\)?(&amp;quot;)
      do
      (down-list 1)
      (mylib-compress-region)
      (up-list 1)
      else do (forward-sexp 1))))

(defun mylib-compress-need-space-p ()
  (cond ((or (bobp) (eobp))
         nil)
        ((string-match &amp;quot;[\&amp;quot;&amp;#39;(),`]&amp;quot; (string (following-char)))
         nil)
        ((looking-back &amp;quot;#[0-9]+#&amp;quot;)
         nil)
        ((looking-back &amp;quot;#\\\\.&amp;quot;)
         t)
        ((string-match &amp;quot;[\&amp;quot;()]&amp;quot; (string (preceding-char)))
         nil)
        (t)))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/6810/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/6810/</guid></item><item><title>匿名's comment on 設定ファイルから値を取得
</title><link>http://ja.doukaku.org/comment/6643/</link><description>



&lt;a href="http://ja.doukaku.org/186/"&gt;設定ファイルから値を取得&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/186/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/186/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;設定ファイルのフォーマットは S式の連想リストです。
ファイルの内容を一時バッファに格納し、そのバッファを
read で読み込んでいます。

ファイル：ShowPrice.ini
((item-name . りんご)
 (item-cost . 200))

&amp;gt; (show-price)
=&amp;gt; "「りんご」は210円（税込み）"&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun show-price ()
  (let ((call-with-input-file #&amp;#39;(lambda (filename proc)
                                  (with-temp-buffer
                                    (progn (insert-file-contents filename)
                                           (funcall proc (current-buffer))))))
        (call-with-name&amp;amp;cost #&amp;#39;(lambda (alist proc)
                                 (funcall proc
                                          (cdr (assq &amp;#39;item-name alist))
                                          (cdr (assq &amp;#39;item-cost alist)))))
        (call-with-add-tax #&amp;#39;(lambda (rate base proc)
                               (funcall proc (/ (* base (+ rate 100)) 100)))))
    (funcall call-with-input-file (expand-file-name &amp;quot;ShowPrice.ini&amp;quot;)
             #&amp;#39;(lambda (in)
                 (funcall call-with-name&amp;amp;cost (read in)
                          #&amp;#39;(lambda (name cost)
                              (funcall call-with-add-tax 5 cost
                                       #&amp;#39;(lambda (cost)
                                           (format &amp;quot;「%s」は%d円（税込み）&amp;quot; name cost)))))))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/6643/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/6643/</guid></item><item><title>匿名's comment on コメントの削除
</title><link>http://ja.doukaku.org/comment/6560/</link><description>



&lt;a href="http://ja.doukaku.org/185/"&gt;コメントの削除&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/185/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/185/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;comment-kill がやるようです。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun decomment (buffer)
  &amp;quot;バッファ内のコメント文を削除します&amp;quot;
  (interactive &amp;quot;bdecomment &amp;quot;)
  (with-current-buffer buffer
    (save-excursion
      (goto-char (point-min))
      (comment-kill (point-max)))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/6560/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/6560/</guid></item><item><title>kozima's comment on スタックの操作
</title><link>http://ja.doukaku.org/comment/4724/</link><description>



&lt;a href="http://ja.doukaku.org/111/"&gt;スタックの操作&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/111/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/111/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;本当のスタックオーバーフローではありませんが、すぐ書ける Emacs Lisp の場合でも。&lt;/p&gt;
&lt;p&gt;関数呼び出しのネスト数が max-lisp-eval-depth の値を超えるとエラーになります。初期値は 300 ぐらいが普通みたいです。&lt;/p&gt;
&lt;p&gt;普通の変数なので setq で大きい数に設定すれば増やせますが、documentation に「大きくしすぎるとクラッシュするかも」とか書いてあります。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun f () (f))
(f) ;; =&amp;gt; Debugger entered--Lisp error: (error &amp;quot;Lisp nesting exceeds `max-lisp-eval-depth&amp;#39;&amp;quot;)
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/4724/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/4724/</guid></item><item><title>みよ's comment on 自然数の分割
</title><link>http://ja.doukaku.org/comment/4316/</link><description>



&lt;a href="http://ja.doukaku.org/89/"&gt;自然数の分割&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/89/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/89/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;comprehensionって便利ですね。
List Comprehension - defmacro によるリストの内包表記
&lt;a class="reference" href="http://lambda.s55.xrea.com/Emacs.html"&gt;http://lambda.s55.xrea.com/Emacs.html&lt;/a&gt;
のlist-of
を利用してemacs-lispで書いてみました。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun partitionNum (a b)
  (if (= b 1)
      (list (list a))
    (let ((x 0) (l &amp;#39;()))
      (while (&amp;lt;= x a)
    (progn
      (setq l
        (append 
         l
         (list-of (append (list (- a x)) y)
              (y in (partitionNum x (- b 1))))))
      (setq x (+ x 1))))
      l)))
(print (partitionNum 5 3))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/4316/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/4316/</guid></item><item><title>kacchi's comment on 文字列のセンタリング
</title><link>http://ja.doukaku.org/comment/4160/</link><description>



&lt;a href="http://ja.doukaku.org/87/"&gt;文字列のセンタリング&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/87/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/87/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;Emacs Lisp
実行結果:
(string-centering "abc" 0)
""
(string-centering "abc" 1)
"b"
(string-centering "abc" 2)
"ab"
(string-centering "abc" 3)
"abc"
(string-centering "abc" 4)
"abc "
(string-centering "abc" 5)
" abc "
(string-centering "abc" 6)
" abc  "
(string-centering "abc" 7)
"  abc  "&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun string-centering (s c)
  (let ((p (lambda (k) (make-string k ? )))
        (d (- c (length s))))
    (let ((n (/ d 2))
          (m (% d 2)))
      (if (&amp;gt;= d 0)
          (concat (funcall p n) s (funcall p (+ n m)))
        (substring s (abs n) (- (length s) (abs (+ n m))))))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/4160/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/4160/</guid></item><item><title>kozima's comment on 文字列リストをTRIE Optimizeされた正規表現に
</title><link>http://ja.doukaku.org/comment/4118/</link><description>



&lt;a href="http://ja.doukaku.org/84/"&gt;文字列リストをTRIE Optimizeされた正規表現に&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/84/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/84/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;Emacs Lisp だと regexp-opt が要求通り(+α)のことをやってくれるようです。
ただ、backslash だらけな elisp の正規表現が返ります。

実行結果は以下。
"program\\(?:ist\\(?:ic\\)?\\|m\\(?:a\\(?:r\\|ti\\(?:c\\(?:ally\\)?\\|st\\)\\)?\
\\|er\\)\\)?"&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(regexp-opt &amp;#39;(&amp;quot;program&amp;quot;
              &amp;quot;programist&amp;quot;
              &amp;quot;programistic&amp;quot;
              &amp;quot;programma&amp;quot;
              &amp;quot;programmar&amp;quot;
              &amp;quot;programmatic&amp;quot;
              &amp;quot;programmatically&amp;quot;
              &amp;quot;programmatist&amp;quot;
              &amp;quot;programmer&amp;quot;))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/4118/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/4118/</guid></item><item><title>kozima's comment on 水の移し替えパズル
</title><link>http://ja.doukaku.org/comment/3616/</link><description>



&lt;a href="http://ja.doukaku.org/73/"&gt;水の移し替えパズル&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/73/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/73/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;解くプロセスを Emacs で表示してみました。
もっときれいに書けるかも……&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(eval-when-compile (require &amp;#39;cl))

(defun water-puzzle (a b c)
  (let ((cups (list a b c)))
    (destructuring-bind ((i p) (j q) (k r))
        (sort `((0 ,a) (1 ,b) (2 ,c))
              (lambda (x y) (&amp;lt; (cadr x) (cadr y))))
      (cond ((zerop (mod (- p q) 3)) (show-strategy cups i j k))
            ((zerop (mod (- p r) 3)) (show-strategy cups i k j))
            ((zerop (mod (- q r) 3)) (show-strategy cups j k i))
            (t (message &amp;quot;Cannot solve!&amp;quot;))))))

(defun show-strategy (cups i j k)
  (let ((buf (get-buffer-create &amp;quot;*water puzzle*&amp;quot;))
        (mover (lambda (di dj dk)
                 (incf (nth i cups) di) (redraw-cup i di)
                 (incf (nth j cups) dj) (redraw-cup j dj)
                 (incf (nth k cups) dk) (redraw-cup k dk)))
        (counter 0))
    (switch-to-buffer buf)
    (show-init-state cups)
    (while (&amp;gt; (nth j cups) 0)
      (sit-for 1)
      (apply mover (if (zerop (nth i cups)) &amp;#39;(2 -1 -1) &amp;#39;(-1 -1 2)))
      (incf counter))
    (message &amp;quot;Solved in %d step%s.&amp;quot;
             counter (if (= counter 1) &amp;quot;&amp;quot; &amp;quot;s&amp;quot;))))

(defun show-init-state (cups)
  (delete-region (point-min) (point-max))
  (redraw-cup 0 (car cups))   (insert ?\n)
  (redraw-cup 1 (cadr cups))  (insert ?\n)
  (redraw-cup 2 (caddr cups)) (insert ?\n))

(defun redraw-cup (i d)
  (goto-line (1+ i))
  (if (plusp d) (dotimes (x d) (insert ?|)) (delete-char (- d))))

;;; test
(water-puzzle 4 2 10)
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/3616/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/3616/</guid></item><item><title>kozima's comment on 制限時間内のキー入力検査
</title><link>http://ja.doukaku.org/comment/3217/</link><description>



&lt;a href="http://ja.doukaku.org/64/"&gt;制限時間内のキー入力検査&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/64/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/64/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;Emacs のミニバッファから。&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun input-checker (n s)
  (interactive &amp;quot;nTime(second): \nsString: &amp;quot;)
  (let ((c (read-char (concat &amp;quot;input(&amp;quot; s &amp;quot;)=&amp;gt;&amp;quot;))))
    (push c unread-command-events))
  (with-timeout (n (message &amp;quot;TIME OUT&amp;quot;))
    (let ((input (read-string (concat &amp;quot;input(&amp;quot; s &amp;quot;)=&amp;gt;&amp;quot;))))
      (message (if (string= input s) &amp;quot;OK&amp;quot; &amp;quot;NG&amp;quot;)))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/3217/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/3217/</guid></item><item><title>kacchi's comment on 文字列の反転
</title><link>http://ja.doukaku.org/comment/2976/</link><description>



&lt;a href="http://ja.doukaku.org/58/"&gt;文字列の反転&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/58/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/58/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  Emacs Lispにはそれ用の関数はないです。
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun reverse-string (str)
  (concat (nreverse (append str nil))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2976/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2976/</guid></item><item><title>kacchi's comment on 与えられた文字列でピラミッド
</title><link>http://ja.doukaku.org/comment/2673/</link><description>



&lt;a href="http://ja.doukaku.org/52/"&gt;与えられた文字列でピラミッド&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/52/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/52/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;あまり長くない文字列なら再帰でも行けます。
(Emacsは再帰の深さが変数max-lisp-eval-depthで制限されるので事実上使えない)

(pyramid "abracadabra")
          a
         r a
        b r a
       a b r a
      d a b r a
     a d a b r a
    c a d a b r a
   a c a d a b r a
  r a c a d a b r a
 b r a c a d a b r a
a b r a c a d a b r a
&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun pyramid (s &amp;amp;optional p)
  (unless (string= s &amp;quot;&amp;quot;)
    (pyramid (substring s 1) (cons ? p))
    (insert (concat p) (mapconcat #&amp;#39;string s &amp;quot; &amp;quot;) &amp;quot;\n&amp;quot;)))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2673/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2673/</guid></item><item><title>rubikitch's comment on 与えられた文字列でピラミッド
</title><link>http://ja.doukaku.org/comment/2588/</link><description>



&lt;a href="http://ja.doukaku.org/52/"&gt;与えられた文字列でピラミッド&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/52/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/52/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(require &amp;#39;cl)
(defun pyramid (str)
  (interactive &amp;quot;sPyramid string: &amp;quot;)
  (with-output-to-temp-buffer &amp;quot;*Pyramid*&amp;quot;
    (loop for i from (1- (length str)) downto 0 do
          (princ (make-string i ? ))
          (princ (mapconcat &amp;#39;identity (split-string (substring str i) &amp;quot;&amp;quot;) &amp;quot; &amp;quot;))
          (terpri))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2588/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2588/</guid></item><item><title>mz's comment on 重複無し乱数
</title><link>http://ja.doukaku.org/comment/2542/</link><description>



&lt;a href="http://ja.doukaku.org/46/"&gt;重複無し乱数&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/46/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/46/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;;;  random-permutation
(random t)
(bingo 10)
&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun iota (n &amp;amp;optional a step)
  (setq step (or step 1))
  (do ((n n (- n 1))
       (ret &amp;#39;() (cons a ret))
       (a (or a 0) (+ a step)))
      ((&amp;lt;= n 0) (nreverse ret))))
(defun bingo (a &amp;amp;optional b)
  (let* ((ret (vconcat (mapcar &amp;#39;1+ (iota a b))))
	 (num (length ret))
	 val rnd)
    (dotimes (x  num ret)
      (setq rnd (random num)
	    val (aref ret x))
      (aset ret x (aref ret rnd))
      (aset ret rnd val))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2542/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2542/</guid></item><item><title>rubikitch's comment on 文字列からの情報抽出
</title><link>http://ja.doukaku.org/comment/2532/</link><description>



&lt;a href="http://ja.doukaku.org/51/"&gt;文字列からの情報抽出&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/51/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/51/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;カレントバッファを入力としてM-x print-image-spec-on-bufferすると*image-spec*バッファに出力されます。&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(require &amp;#39;cl)
(defun print-image-spec-on-buffer ()
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (with-output-to-temp-buffer &amp;quot;*image-spec*&amp;quot;
      (while (re-search-forward &amp;quot;\\([A-Za-z]+\\)\\(-hidden\\)?\\(-\\(small\\|big\\)\\)?\\.\\([A-Za-z]+\\)&amp;quot; nil t)
        (destructuring-bind (s0 e0  sname ename  shidden ehidden _ _ ssize esize  sext eext)
            (match-data)
         (princ (format &amp;quot;name:&amp;#39;%s&amp;#39;, ext:&amp;#39;%s&amp;#39;, size: %s hidden: %s\n&amp;quot;
                        (buffer-substring sname ename)
                        (buffer-substring sext eext)
                        (if ssize (buffer-substring ssize esize) &amp;quot;normal&amp;quot;)
                        (if shidden &amp;quot;True&amp;quot; &amp;quot;False&amp;quot;))))))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2532/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2532/</guid></item><item><title>rubikitch's comment on 隣り合う二項の差
</title><link>http://ja.doukaku.org/comment/2429/</link><description>



&lt;a href="http://ja.doukaku.org/49/"&gt;隣り合う二項の差&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/49/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/49/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;elispのmapcarは劣化版。
&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(defun diffseq (list)
  (mapcar* #&amp;#39;- (cdr list) list))
(diffseq &amp;#39;(3 1 4 1 5 9 2 6 5))          ; =&amp;gt; (-2 3 -3 4 4 -7 4 -1)
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2429/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2429/</guid></item><item><title>kozima's comment on 複数行のコメントアウト
</title><link>http://ja.doukaku.org/comment/2350/</link><description>



&lt;a href="http://ja.doukaku.org/42/"&gt;複数行のコメントアウト&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/42/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/42/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;ソースコード中で使われることは意図してなさそうですが
#@n で n 文字読み飛ばすことができます。&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;#@18
this is a comment
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2350/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2350/</guid></item><item><title>rubikitch's comment on 与えられた数字のケタ数
</title><link>http://ja.doukaku.org/comment/2034/</link><description>



&lt;a href="http://ja.doukaku.org/40/"&gt;与えられた数字のケタ数&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/40/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/40/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  今度は数値計算でやってみた。そのままCommon Lispでも通る。
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(require &amp;#39;cl)
(defun keta (n)
  (cond ((zerop n) (values 1 1))
        ((&amp;lt; n 0) (keta (- n)))
        (t (loop
              with d = 1
              with len = 0
              while (&amp;gt;= (/ n d) 1) do
                (incf len)
                (setf d (* d 10))
              finally (return (values len (/ d 10)))))))

(keta 2469)                             ; =&amp;gt; (4 1000)
(keta 600)                              ; =&amp;gt; (3 100)
(keta 1)                                ; =&amp;gt; (1 1)
(keta 0)                                ; =&amp;gt; (1 1)
(keta -2469)                            ; =&amp;gt; (4 1000)
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/emacslisp/"&gt;
      Emacs Lisp
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2034/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2034/</guid></item></channel></rss>