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

KMRCLを眺める (48) ALIST-ELEM-P

| 00:18 | KMRCLを眺める (48) ALIST-ELEM-P - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める (48) ALIST-ELEM-P - わだばLisperになる

今回は、KMRCLのlists.lisp中からALIST-ELEM-Pで、ここからalist、plist編に突入のようです。

名前からするに、alistの一要素かどうかを調べる述語っぽいですが、とりあえず定義をみてみると、

;; alists and plists

(defun alist-elem-p (elem)
  (and (consp elem) (atom (car elem)) (atom (cdr elem))))

となっています。

これだと値の部分がatomじゃないとalistの要素じゃないという感じなのですが、

(LIST (ALIST-ELEM-P 'A)
      (ALIST-ELEM-P '(A . B))
      (ALIST-ELEM-P '(A B))
      (ALIST-ELEM-P '(A))) ; = (A .  () )とも言える
;⇒ (NIL T NIL T)
((A . (B C) (D . E))) = ((A B C) (D . E)))

のように値にリストを格納してもalistじゃないかなと自分は思っていたのですが、どうなのでしょう。

HyperSpecを参照してみても特にCARもCDRもATOMである必要はないように思えましたが…。