← Back to context

Comment by bakul

7 years ago

I am more familiar with k so will use it as an example. If we were to extend it, the equivalent of some functions in compositor.nl would be something like this:

  compositeSrc:{x} // output first arg
  compositeDst:{y} // output second arg
  compositeInvert:{+(1-x[;0];1-x[;1];1-x[;2];x[;3])}
  // take a column, invert r, g, b columns and transpose

where x[i;0 1 2 3] == ith (r,g,b,a) of x. No need for "∀ (A, B) >>". This is implicit as k/APL work on whole collections. Basic operations are already overloaded. There would need to be a way to define tuples. "x[i;2]" to refer to ith blue value is a bit cryptic. You can define verb "blue x[i]" to do the same but may be some language syntax would help. I can't grasp enough of Nile through the examples I've seen so far but seems doable.

If you take a look at things like converting beziers into sub-beziers of specific flatness, you could express it pretty easily as a // convergence as in k, or a power operator in apl, but it would be really nice to have the notion of an algebra of points. So if the distance between two points is b - a, then +/ eachprior {y-x} would give us the total length of a polyline.

  • This can get a bit tricky. You can do something like this today:

      d:{_sqrt+/(y-x)^2}
      ls: 2 10 # 20 _draw 0 // a list of 10 random points
      +/d':ls // total length
    

    Now if x, y above are vectors of points (as opposed to vectors of pairs), and if points have their own - verb, total length becomes "+/{y-x}':ls". But to define such a - for point, you'd need conversion verbs (or enclose/disclose).