#:g1: cl-jpl-utilの紹介

Posted 2014-10-16 11:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の289日目です。

cl-jpl-utilとはなにか

 cl-jpl-utilは、J.P. Larocque氏作のCommon Lispのユーティリティ集です。

パッケージ情報

パッケージ名cl-jpl-util
Quicklisp
CLiKiCLiki: cl-jpl-util
Quickdocscl-jpl-util | Quickdocs
CL Test Grid: ビルド状況cl-jpl-util | CL Test Grid

インストール方法

(ql:quickload :jpl-util)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 JPLとあるのでNasaのJPLかなにかと思いましたが、J.P. Larocque氏のイニシャルということみたいです。
内容は良くあるユーティリティ集ですが、こざっぱりとした感じに纏まっています。

関数

  • 1or
  • a/an-number
  • accumulate-to-dynamic-vector
  • accumulate-to-hash-table
  • accumulate-to-list
  • accumulate-to-vector
  • adjacent-pairs
  • alist->hash-table
  • alist->plist
  • all
  • any
  • assoc*
  • best
  • check-bounding-indices
  • check-type*
  • circular-list
  • clear-traces!
  • coerce-boolean
  • combine-elements
  • compose
  • compose-1v
  • composite-lesser?
  • cond-replace
  • copy-object
  • csubtypecase
  • curry-left
  • curry-right
  • decode-time-duration
  • defclass*
  • defvar-unbound
  • delete-nth!
  • designated-class
  • designated-function
  • doseq
  • duplicates-p
  • empty?
  • english-list-format-control
  • ensure-type
  • eof-p
  • equivalent-hash-table-test
  • esubtypecase
  • find-duplicates
  • format-ordinal
  • format-time-duration
  • fractional
  • get-reasonable-real-time
  • get-reasonable-run-time
  • group-by-n
  • hash-table->alist
  • insert-at
  • integer->twos-complement
  • integer-digit-count
  • integer-digits
  • iterate-alist
  • iterate-plist
  • lambda*
  • lesser?
  • list-extract!
  • list-traces
  • map-adjacent-pairs
  • map-lines
  • mean
  • merge-alists
  • nsort
  • nstable-sort
  • nth-arg
  • option-clause-bind
  • package<
  • parse-progn
  • parse-sequence-type
  • parse-vector-type
  • partition-list
  • partition-set
  • plist->alist
  • proper-list?
  • push-append
  • push-nconc
  • read-lines
  • read-new-value
  • remove-duplicate-properties
  • remove-ordered-duplicates
  • set-equal
  • shuffle
  • shuffle!
  • sort
  • split-list!
  • square
  • stable-sort
  • standard-deviation
  • string-begin-equal
  • string-begin=
  • string-end-equal
  • string-end=
  • subseq*
  • subseq-displace
  • subtype-error-expected-supertype
  • subtype-error-type
  • subtypecase
  • symbol<
  • test-order-pred
  • twos-complement->integer
  • unique-pairs
  • vector-delete
  • vector-delete-range
  • verbosely
  • with-accessors*
  • with-extent-hooks
  • with-extent-hooks%
  • with-gensyms
  • with-list-iterator
  • with-range-iterator
  • with-safe-alloc
  • with-sequence-iterator
  • with-trace
  • with-vector-iterator
  • with-verbosity
  • xor
  • zip
  • zip*

変数

  • *verbose*

  • array-dimension
  • array-index
  • class-designator
  • extended-function-designator
  • format-control
  • function-designator
  • function-name
  • pathname-designator
  • subsecond-universal-time
  • subtype-error
  • universal-time

 面白そうなものを数点取り上げると、
formatの指示子が憶えられないので作られたような、english-list-format-control

(jpl-util:english-list-format-control)
;=>  "~#[~;~A~;~A and ~A~:;~@{~#[~;and ~]~A~^, ~}~]"

(format t (jpl-util:english-list-format-control "~A" "or") 1 2 3 4) ;>> 1, 2, 3, or 4 ;=> NIL

(format t (jpl-util:english-list-format-control) 1) ;>> 1 ;=> NIL

(format t (jpl-util:english-list-format-control) 1 2) ;>> 1 and 2 ;=> NIL

(format t (jpl-util:english-list-format-control)) ;=> NIL

(format t (jpl-util:english-list-format-control "~A" "そして") 1 2 3 4) ;>> 1, 2, 3, そして 4 ;=> NIL

良く使いそうな型の定義

(typep '(setf foo) 'jpl-util:function-name)
;=>  T

(typep -1 'jpl-util:universal-time) ;=> NIL

他ありがちな状況のためのもの

(jpl-util:coerce-boolean (member 'foo '(foo bar baz)))
;=>  T

位でしょうか。

まとめ

 今回は、cl-jpl-utilを紹介してみました。
cl-jpl-utilまさに日常的にCommon Lispを書いていて必要になったのをまとめたという感じのユーティリティですね。

comments powered by Disqus