#:g1: alist-libの紹介

Posted 2014-09-24 11:30:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の267日目です。

alist-libとはなにか

 alist-libは、Peter Danenberg氏作のChickenのalistのライブラリです。

パッケージ情報

パッケージ名alist-lib
Chicken eggs:alist-lib - The Chicken Scheme wiki

インストール方法

$ sudo chicken-install alist-lib

すれば、

(use alist-lib)

で使えます。

試してみる

 srfi-1あたりにもalistを扱う関数はちょこちょこありますが、その辺とは被らないようなものが用意されているようです。
用意されているのは、こんな感じですが、名前から大体動作がわかるかなと思います。

(alist-map cons
           '((A . 65) (B . 66) (C . 67) (D . 68) (E . 69) (F . 70) (G . 71) (H . 72)))
;=> ((A . 65) (B . 66) (C . 67) (D . 68) (E . 69) (F . 70) (G . 71) (H . 72))

(alist-keys '((A . 65) (B . 66) (C . 67) (D . 68) (E . 69) (F . 70) (G . 71) (H . 72))) ;=> (A B C D E F G H)

(alist-values '((A . 65) (B . 66) (C . 67) (D . 68) (E . 69) (F . 70) (G . 71) (H . 72))) ;=> (65 66 67 68 69 70 71 72)

(let ((u (alist-copy '((A . 65) (B . 66) (C . 67) (D . 68) (E . 69) (F . 70) (G . 71) (H . 72))))) (alist-set! u 'A #f) u) ;=> ((A . #f) (B . 66) (C . 67) (D . 68) (E . 69) (F . 70) (G . 71) (H . 72))

(let ((u (alist-copy '((A . 65) (B . 66) (C . 67) (D . 68) (E . 69) (F . 70) (G . 71) (H . 72))))) (alist-update! u 'A (lambda (x) #f)) u) ;=> ((A . #f) (B . 66) (C . 67) (D . 68) (E . 69) (F . 70) (G . 71) (H . 72))

(alist-ref '((A . 65) (B . 66) (C . 67) (D . 68) (E . 69) (F . 70) (G . 71) (H . 72)) 'A) ;=> 65

assocしてcdrも面倒なのでalist-refは良いかもしれないですね。

まとめ

 今回は、alist-libを紹介してみました。
割合に奥が深いalist系関数。いつかalist関係の関数をまとめてみたいところです。

comments powered by Disqus