Skip to content

Instantly share code, notes, and snippets.

@miyamuko
Created October 22, 2011 03:41
Show Gist options
  • Save miyamuko/1305573 to your computer and use it in GitHub Desktop.
Save miyamuko/1305573 to your computer and use it in GitHub Desktop.
#xyzzy の real 型で数字の範囲を指定して deftype できない
;; xyzzy の real 型で数字の範囲を指定して deftype できない
(deftype negative-real ()
`(real * (0)))
;=> negative-real
(typep -1 (si:canonicalize-type 'negative-real))
;=> t
(typep 1 (si:canonicalize-type 'negative-real))
;=> t
;; integer 他は大丈夫
(deftype negative-integer ()
`(integer * (0)))
;=> negative-integer
(typep -1 (si:canonicalize-type 'negative-integer))
;=> t
(typep 1 (si:canonicalize-type 'negative-integer))
;=> nil
;; clisp だと大丈夫
[1]> (deftype negative-real ()
`(real * (0)))
NEGATIVE-REAL
[2]> (typep -1 'negative-real)
T
[3]> (typep 1 'negative-real)
NIL
;; 原因は lisp/typespec.l で real だけ defpred-number されてないから
(get 'real 'si::type-specifier-list)
;=> nil
(get 'real 'si::type-predicate)
;=> realp
(get 'integer 'si::type-specifier-list)
;=> #<lexical-closure: (anonymous)>
(get 'integer 'si::type-predicate)
;=> nil
;; 無理矢理 defpred-number したら治った
(setf (get 'real 'si::type-predicate) nil)
;=> nil
(si::defpred-number real realp)
;=> #<lexical-closure: (anonymous)>
(typep 1 (si:canonicalize-type 'negative-real))
;=> nil
(typep -1 (si:canonicalize-type 'negative-real))
;=> t
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment