On Fri, Nov 11, 2005 at 06:21:53AM +0000, Luke Palmer wrote: : Just some initial thoughts and syntax issues. I'll come back to it on : the conceptual side a little later. : : On 11/10/05, Jonathan Lang <[EMAIL PROTECTED]> wrote: : > : > class complexRectilinear { : > has $.x, $.y; : : Hmm, that might need to be : : has ($.x, $.y); : : However, inlining "has"s isn't possible, so there's really no reason : for that restriction. But it might be good just for consistency with : "my". But it also might not, because I'm always annoyed with those : parentheses.
It's not about inlining in general, but particularly about the relationship of precedence with assignment. And you presumably *can* say: has ($.x, $.y) = (1, 2); to mean the same as: has $.x = 1; has $.y = 2; Likewise state ($.x, $.y) = (1, 2); means state $.x = 1; state $.y = 2; : > method infix:+ ($a is complexRectlinear, $b is complexRectilinear) : : method infix:<+> (complexRectilinear $a, complexRectilinear $b) : : > returns complexRectilinear { : > return new complexRectilinear($a.x + $b.x, $a.y + $b.y); : : return new complexRectilinear: $a.x + $b.x, $a.y + $b.y; <rampantspeculation> Given the new relationship between $obj.method(...) and $obj.method: ..., I'm wondering if we can make the same relationship between method $obj(...) method $obj: ... That is, : becomes more of a Haskellish $ operator. I speculated this earlier when I wanted to change $obj.method :{...} into $obj.method: {...} But "foo $bar(...)" is probably too ambiguous with a possible foo list operator unless we were to require : on all calls to list operators: print: 1,2,3 That's likely to inspire mutiny. Though we could perhaps get away with requiring the colon only on list operators that have more than one argument, on the theory that foo 1; is always the same as 1.foo; </rampantspeculation> : Hmm, that union looks like a backwards role. That is, you're creating : a role "complex" and saying that the interface of that role is : whatever is common between these two classes. Interesting idea... not : sure how fruitful that is though. : : The idea of several isomorphic implementations of the same thing has : occurred to me several times, but I never figured out how it might : work. Let me think about that. And what's the common "role" of a scalar that can have a string implementation in several abstraction levels, plus any number of native integer/float and bignum/bigfloat implementations hiding behind it? Interesting question. : > If $b's real component is : > rational, it makes some sense to treat [-1] as the last element in the : > list, [-2] as the second-to-last, and so on; but if $b's real : > component is irrational, there _is_ no positive end to the list, and : > it would make sense if [-1] referred to the first result that you : > reach by rotating in the clockwise direction from the primary result. : > Can an "infinitely long" list be set up so that [-1] still has : > meaning? : : Hmm. I don't see why not. Though we haven't established the array : laws yet, you're probably not breaking any of them by doing that. : You can consider your array to be transfiniteish: : : [ a[1], a[2], ..., a[-2], a[-1] ] : : Understanding that no matter how long you iterate going forward, : you'll never get to a[-1]. I believe we already said you could pop or refer to the end of an infinite array in A6/Appendix B. : > As an example, : > let's say that $b = 0.5. This means that the first result is rotated : > zero radians counterclockwise from $a's direction, and corresponds to : > [0]. [1] would correspond to being rotated pi radians, and the length : > generator would say that there are only two elements in the list. : > Could you set things up so that you could nonetheless access [2] : > (which is rotated by 2*pi radians), [3] (rotated by 3*pi radians), or : > possibly even have [-1] represent a rotation by -pi radians? : : Well, it would certainly be okay to have an infinite list that had : that property. However, having the list report that its length is, : say, finite $n, and then having @list[$n] be something besides undef : may be breaking some law (but maybe not[1]). : : What you're really doing is defining the indices mod $n. Maybe : there's some way to tell the compiler that your indices are defined : that way to allow this sort of behavior. Maybe you could make a : subclass of Array called ModArray or something that allowed this. : Maybe you're simply not allowed to use square brackets in a case where : the list is finite but defined for all indices. All is fair if you predeclare. : But that's all theoretical formality. For the Perl practicioner, feel : free to break the laws if it helps you get your job done. :-) : : Luke : : [1] I think I'm going to embark on writing down the laws for a few of : our basic types so we can actually talk about this without speculating : so greatly. While you're there, also think about the gray area between arrays and hashes, and whether .[...] subscripts are just a specialized form of .{...} subscripts. Larry