C.I.CLを眺める(14) TRANSPOSE — #:g1

Posted 2011-05-01 12:11:00 GMT

今回は、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)))))
となっています。

comments powered by Disqus