Re: WG: Recovering the once true meaning of type NIL in LOOP

[email protected] (Don Cohen) Sat, 23 Dec 2017 21:59:34 +0000
Newsgroups gmane.lisp.clisp.devel
Message-ID <[email protected]>
 > > but in (LOOP for (i j k) of-type (fixnum) ...)
 > > I would expect the atom fixnum to match only i,
 > 
 > Yes, agree.
 > 
 > > and I would NOT
 > > expect of-type (fixnum) to mean the same as of-type (fixnum nil nil)
 > > so I would expect j and k to be of unspecified type.
 > 
 > Here you have assumed that the type specifier has a list structure
 > with some kind of "optional" semantics. However, 6.1.1.7 is clear about:

Not sure what you mean by optional semantics - if there is nothing
matching some variable then I don't want it assigned a type.

 >   tree n. 1. a binary recursive data structure made up of conses and atoms
 > So the type specifier (FIXNUM) has to be read/interpreted as (FIXNUM . NIL).

Yes, but that's supposed to match a tree of variables, so 
(fixnum . nil) matches (i . nil) with i matching fixnum.
But I don't think that (i j) matches (fixnum) with j matching nil.
You could argue that (j) matches nil, but in that case I'd expect
that the semantics of a single symbol matching a list should 
specifically exclude nil as the symbol.
Something like this:
(defun match(x y)
 (cond ((and x (symbolp x) y (symbolp y))(list x y))
       ((and (consp x) y (symbolp y)) (list x y))
       ((and (consp y) y (symbolp x)) (list x y))
       ((and (consp x)(consp y))
        (cons (match (car x)(car y))(match (cdr x)(cdr y))))))
MATCH
[2]> (match '(i j k) 'integer)
((I J K) INTEGER)
[3]> (match '(i j k) '(integer))
((I INTEGER))

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
clisp-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/clisp-devel