Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2009-12-22

KMRCLを眺める (45) MAPCAR2-APPEND-STRING-NONTAILREC

| 00:19 | KMRCLを眺める (45) MAPCAR2-APPEND-STRING-NONTAILREC - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める (45) MAPCAR2-APPEND-STRING-NONTAILREC - わだばLisperになる

今回は、KMRCLのlists.lisp中からMAPCAR2-APPEND-STRING-NONTAILRECです。

名前のMAPCAR2〜の2はなんなんだという感じですが、リストを2つ引数に取るからのようです。

MAPCAR2という名前よりいっそのことZIPと付けた方が分かり易いようなそうでもないような。

さらに-NONTAILRECという接尾語は前々回のMAPCAR-APPEND-STRING-NONTAILRECと同じく末尾再帰でないということを表わしています。

定義は、

(defun mapcar2-append-string-nontailrec (func la lb)
  "Concatenate results of mapcar lambda call's over two lists"
  (let ((a (car la))
        (b (car lb)))
    (if (and a b)
      (concatenate 'string (funcall func a b)
                   (mapcar2-append-string-nontailrec func (cdr la) (cdr lb)))
      "")))

です。

動作例は、

(MAPCAR2-APPEND-STRING-NONTAILREC 
 (LAMBDA (X Y) 
         (CONCATENATE 'STRING X Y))
 '("FOO" "BAR" "BAZ")
 '("123" "456" "789"))
;⇒ "FOO123BAR456BAZ789"

こんな感じですが、どの辺りで使うのかぱっとは思い浮かばないです…。

MAPCAR2-APPEND-STRINGがぴったりはまる時に限って、これの存在を思い出せずに、適当に自作してしまう、そんな予感がしました。