#:g1: KMRCLを眺める(238) hash.lisp

Posted 2021-12-25 19:18:12 GMT

先日久々にKMRCLを眺めましたが、確認してみるとあと8ファイル眺めればKMRCLは読破できるようなので読み進めてみることにします。

hash.lisp を眺める

print-hash

hash.lispの中身はprint-hashのみです。

(defun print-hash (h &key (stream *standard-output*)
                   key-transform-fn value-transform-fn
                   (prefix "") (divider " -> ") (terminator "~%"))
  (maphash #'(lambda (k v)
               (format stream "~A~S~A~S"
                       prefix
                       (if key-transform-fn
                           (funcall key-transform-fn k)
                           k)
                       divider
                       (if value-transform-fn
                           (funcall value-transform-fn v)
                           v))
               (when terminator (format stream terminator)))
           h)
  h)

名前のとおりhash-tableの中身を印字するものです。
SBCL等は、describeで鍵/値の確認はできませんが、LispWorks等では中身を表示してくれるので、そういう処理系では不要かもしれません。

;;; SBCL
* (describe (alexandria:plist-hash-table '(a 0 b 1 c 2)))
#<HASH-TABLE :TEST EQL :COUNT 3 {1003D22A03}>
  [hash-table]

Occupancy: 0.4 Rehash-threshold: 1.0 Rehash-size: 1.5 Size: 7 Synchronized: no

;;; LispWorks
(describe (alexandria:plist-hash-table '(a 0 b 1 c 2)))

#<eql Hash Table{3} 40111C0803> is a hash-table b 1 c 2 a 0

LispWorksの場合は、lw:*inspect-through-gui*Tに設定してのinspectの使い勝手が良いのでそちらでも良いでしょう。


HTML generated by 3bmd in LispWorks 8.0.0

comments powered by Disqus