CLでSRFI-60 — #:g1

Posted 2011-12-12 13:27:00 GMT

CLでSRF、今回は、SRFI-60の「整数とビット」です。

ビット操作関係のものはCommon Lispも充実しているので移植する必要はほぼなく、備え付けのものの方が断然速いのですが移植。
** 動作
(defun number->string (n base)
  (format nil "~VR" base n) )

(booleans->integer t) ;=> 1 (booleans->integer t nil) ;=> 2 (booleans->integer t t t t) ;=> 15

(number->string (logand #b1100 #b1010) 2) ;=> "1000" (number->string (logior #b1100 #b1010) 2) ;=> "1110" (number->string (logxor #b1100 #b1010) 2) ;=> "110" (number->string (lognot #b10000000) 2) ;=> "-10000001" (number->string (lognot #b0) 2) ;=> "-1"

** 移植について いつものごとく末尾呼び出しの最適化が自動で効かないことに加え、quotientがcl:floorとは挙動が違うというところではまってしまいました。

comments powered by Disqus