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-30

KMRCLを眺める (53) ALIST-PLIST

| 02:37 | KMRCLを眺める (53) ALIST-PLIST - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める (53) ALIST-PLIST - わだばLisperになる

今回は、KMRCLのlists.lisp中からALIST-PLISTです。

名前からしてalistをplistにするんだなと分かります。

伝統的なLISPだと、ALIST-TO-PLIST、Scheme系だとALIST->PLISTという名付け方が多いみたいですが、こういう風に二者を並べただけのものも、それなりにある気がします。

定義は、

(defun alist-plist (alist)
  (apply #'append (mapcar #'(lambda (x) (list (car x) (cdr x))) alist)))

です。

動作は、

(DEFVAR *ALIST*
  (MAPCAR #'CONS '(A B C D E F G) '(1 2 3 4 5 6 7)))

*ALIST*
;⇒ ((A . 1) (B . 2) (C . 3) (D . 4) (E . 5) (F . 6) (G . 7))

(ALIST-PLIST *ALIST*)
;⇒ (A 1 B 2 C 3 D 4 E 5 F 6 G 7)

眺めて思うのは、折角定義したMAPAPPENDは使わないんだろうか、というところ。

(DEFUN MY-ALIST-PLIST2 (ALIST)
  (MAPAPPEND (lambda (x) (list (car x) (cdr x)))
             ALIST))

しかし、自分で定義しておきながら使ってないというのは、便利そうな定義を後で纒めたりしてできた、ユーティリティ系ライブラリにはありがちかもしれません。

ゲスト



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