Hi
I have the following DEFTYPE
(deftype int-list () '(or null (cons integer int-list)))
Then in LW this happens
CL-USER 6 > (typep '(1 2 3) 'int-list)
Stack overflow (stack size 15997).
In Franz ACL the following happens instead
CL-USER> (typep '(1 2 3) 'int-list) T CL-USER> (typep '(1 a 3) 'int-list) NIL
(Sorry these are the only implementations I have at hand right now).
Now: recursive types are not well understood by the CLHS, and it would seem that both implementations are somewhat "conforming". However, since we are in 2008, ACL behavior is the "correct" one, although it would seem that the people at Franz are stretching the CLHS.
The question I have is the following: how do we go ahead and write a CDR that described ACL apparent behavior (i.e. how do we introduce "correct" recursive types in CL)?
Note that I just want to start a discussion on this issue and collect comments and ideas. I am interested in a medium term discussion on the issue; I am not interested in responses like "use Qi" or "use F#/ Ocaml/Haskell etc" (as an aside, Haskell is my favorite of the bunch).
Thanks
-- Marco Antoniotti
PS. There are also issues of "compilation" vs "run-time" environments to be taken into account. -- Marco Antoniotti