Empty ring = empty ring with parameter

why are they equal?

snap version: 8.0.0

Interesting. I was going to say "because they implement the same function" but that turns out not to be true:
untitled script pic (1)


I vaguely recall that all empty rings used to report themselves, and I convinced Jens that the one without inputs should substitute the input value into the empty space in the ring, same as in any ring without formal parameters, but we didn't really talk about what empty rings with formal parameters should do. I'm inclined to say that it should report an empty string (which seems to be what we do for a null value) to be consistent.

But in any case, you're right, they don't implement the same function, so they shouldn't be equal.

PS The general problem of determining whether two procedures implement the same function is not solvable (because we can't even find out if a procedure reports a value at all, let alone what value). So the above should not be taken as a proposal to make two procedures compare equal iff they implement the same function. Just that if they don't implement the same function, they definitely shouldn't compare equal.

suggestion: rings are equal if (both are empty OR both have same blocks inside) AND (both have no input names: OR both have same input names:)

I think that's how [scratchblocks]<[]=[]>[/scratchblocks] works with non-empty rings (tell me if I wrong).


why equal?

Okay, something changed. It used to be such that if two lists were put in an "=" predicate, it would report false whether the two had the same data or not, because they were two different lists. :confused: :question:

No, not true. = on lists reports True if the lists have the same data. You're thinking of IS IDENTICAL TO, which reports True only if they're the very same list.

But bzzzz is complaining about equality testing between procedures, not between lists; note the grey rings around those LIST blocks.

@geokid was saying that is used to report false. I remember that too, but in 6.0? it was changed to report true, and the identical to block would report false.

My memory is like a sieve. I could have sworn that it always tested value equality ("prints the same" as we say in non-visual languages). But I'll take your word for it.