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 |

2011-05-01

C.I.CLを眺める(14) TRANSPOSE

| 21:11 | C.I.CLを眺める(14) TRANSPOSE - わだばLisperになる を含むブックマーク はてなブックマーク - C.I.CLを眺める(14) TRANSPOSE - わだばLisperになる

今回は、C.I.CLのlist.lispから TRANSPOSE です。

名前からは具体的にどういう動作になるのかいまいち想像がつきませんが、ドキュメントによればツリーのCARとCDRを再帰的に交換するもののようです。

(import 'com.informatimago.common-lisp.list:transpose)

(transpose '(a b c d))
;=> ((((NIL . D) . C) . B) . A)

(transpose '((a . b) . (c . d)))
;=> ((D . C) B . A)

初心者の頃によく作りがちな失敗REVERSEの様な動作ですが、どういうところで使うのでしょうか。

定義は、

(DEFUN TRANSPOSE (TREE)
  "
RETURN: A tree where all the CAR and CDR are exchanged.
"
  (IF (ATOM TREE)
      TREE
      (CONS (TRANSPOSE (CDR TREE)) (TRANSPOSE (CAR TREE)))))

となっています。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20110501