Consider the following function from src/interp/clam.boot:

    numberOfEmptySlots cache==
      count:= (CAAR cache ='$failed => 1; 0)
      for x in tails rest cache while NE(x,cache) repeat
        if CAAR x='$failed then count:= count+1
      count


The SBCL type checker does not like it because:

  * it is able to infer that cache is a list,
  * '=' (coming from NE, which mean not =) can be applied only
    to numbers.

Consequently, we have conflicting assumptions for the same value.  So, we 
have a bug.  Now, looking back at the code, the expression

     NE(x,cache)

cannot be right.  Was it indended to be

    x /= cache

instead?

Note: a /= b is almost same like (not (equal a b)).

What is the semantics of function numberOfEmptySlots?  What is
the structure of its parameter?

-- Gaby


_______________________________________________
Axiom-developer mailing list
Axiom-developer@nongnu.org
http://lists.nongnu.org/mailman/listinfo/axiom-developer

Reply via email to