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 |

2010-12-09

C.I.CLを眺める(1) ENSURE-LIST

| 22:34 | C.I.CLを眺める(1) ENSURE-LIST - わだばLisperになる を含むブックマーク はてなブックマーク - C.I.CLを眺める(1) ENSURE-LIST - わだばLisperになる

KMRCLも230回に及び、残りは、1ファイル完結で長かったり、理解が難しかったりするので、KMRCL以外もちょこちょこ眺めて行こうかなと思います。

どのユーティリティにしようかなと思いましたが、以前からなんとなく気になっていたPascal J. Bourguignon氏のライブラリを眺めることに。

Bourguignon氏は、comp.lang.lisp等で質問に答えたりしていて良く目にするのですが、その際に自作のユーティリティを示すことが結構あり、しかも、それが面白いので気になっていました。

ユーティリティは、

からgitで取得できます。ちょっと導入に癖がありますが、ページの案内どおりにしていれば導入できるでしょう。

ところで、com.informatimago.common-lispだと非常に長いので、どういう風に略そうかと悩みましたが、PJBCLとか勝手な名前を付けるのもあれだし、comp.lang.lispをc.l.lと略すようにC.I.CLと略してみることにしました。

今回は、そのC.I.CLのlist.lispからENSURE-LISTです。

まず、list.lispファイル全体で、パッケージが切ってあって、:com.informatimago.common-lisp.listというパッケージになっています。

実装は、

(DEFUN ENSURE-LIST (ITEM)
  "
RETURN: item if it's a list or (list item) otherwise.
"
  (IF (LISTP ITEM) ITEM (LIST ITEM)))

となっています。

KMRCLだと、KMRCL:MKLISTで同じものが用意されています。

しかし、命名方としては、ENSURE-系の方が動作を的確に表現できているのではないかと。

そして、何故かコードが珍しく大文字です。

ドキュメント文字列の最初と最後の改行は何故なのか気になりますが、見易さへの配慮でしょうか。

コーディングスタイル的に色々と謎なこだわりが多そうなのが眺めていて面白いです。

動作は

(use-package :com.informatimago.common-lisp.list)

(ensure-list 'a)
;=> (A)

(ensure-list '(a))
;=> (A)

(kmrcl:mklist 'a)
;=> (A)

というところ。

ゲスト



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