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

CLでSRFI-26

| 18:21 | CLでSRFI-26 - わだばLisperになる を含むブックマーク はてなブックマーク - CLでSRFI-26 - わだばLisperになる

f-underscoreのようなものもあるし、熱烈に使いたいということもなくなってきたSRFI-26ですが暇だったのでCLにまるごと移植してみました。

使い勝手の問題ですが、LISP-1とLISP-2の表記上の違いがあり、デフォルトを (cut list ...)のようにするか、 (cut #'list ...)のようにするかで迷いましたが、#'を付けることにしました。

#'を付けないで書けた方が良いのですが、付けないとすると、

(mapcar (cut #'list 1 2 <> 3)
        '(1 2 3 4))
;=> ((1 2 1 3) (1 2 2 3) (1 2 3 3) (1 2 4 3))

(let ((list #'list*))
  (mapcar (cut list 1 2 <> 3)
          '(1 2 3 4)))
;=> ((1 2 1 . 3) (1 2 2 . 3) (1 2 3 . 3) (1 2 4 . 3))

のような書き分けができなくなります。

まあ、こんなこともあまりしないので第一引数は、関数であると決め打ちにしてしまっても良いかなとは思います。その場合の改造も簡単にできると思います。

移植について

移植は、define-syntaxがあるのでmbeを利用。

mbeのお蔭で殆どソースコードはいじらなくても動きました。