<div dir="ltr">Here's the behaviour of the + operator, as I understand it.<div><br></div><div>n is a number, a, b are arbitrary values.</div><div><br></div><div>n0 + n1 == the sum of two numbers</div><div><br></div><div>[a0, a1, ... ai] + [b0, b1, ... bi] == [a0+b0, a1+b1, ... ai+bi]</div><div>(both lists have the same length i)</div><div><br></div><div>This is a recursive definition, from which it follows that<br>   [] + [] == []<br>   [1,[2]] + [1,[1]] == [2,[3]]<br></div><div>etc.<br><br></div><div>Is this expected behaviour? From my perspective, yes. 1. OpenSCAD is a language for computational geometry, which puts it into the same family as "math and science" languages like Mathematica, Matlab, Julia, and many more. 2. All of the "math and science" languages I know support element-wise addition of vectors, matrices, etc, so it is familiar and expected behaviour.<br><br></div><div>Most math-and-science languages represent matrices using a built-in multi-dimensional array type, which constrains these arrays to have a "rectangular" shape. If nested arrays are supported at all, then they are less convenient/more complex to use than normal arrays.<br><br></div><div>However, there are a few math-and-science languages that don't have multi-dimensional arrays as a primitive concept: instead, they have 1-dimensional lists, and represent 2-D matrices as lists of lists of numbers. Examples include Mathematica/Wolfram, K and OpenSCAD. These languages happen to all be dynamically typed, and element-wise addition works as it does in OpenSCAD. Elementwise addition of lists works even if the structure is irregular.<br><br></div><div>The one thing I find surprising is that OpenSCAD doesn't support "broadcasting", unlike all of the other math-and-science languages I know. That is, I expect that<br>   1 + [2,3,4] == [3,4,5]<br></div><div>but that's not supported in OpenSCAD.<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 30 September 2016 at 10:52, Ronaldo <span dir="ltr"><<a href="mailto:rcmpersiano@gmail.com" target="_blank">rcmpersiano@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I see three possible behaviors in the evaluation of an expression by<br>
OpenSCAD: it does what is expected, it does something surprising but<br>
reasonable and it does something unreasonable. The last one is clearly a<br>
bug. The first one is the normal case. My interest now is on the second<br>
case: a reasonable surprising behavior. It is surprising when it comprises<br>
less common conditions that are not documented. Being undocumented make them<br>
not eligible to be a feature and that is the issue.<br>
<br>
A first example is the product of a list by a float. It is mentioned in the<br>
manual just for vectors. But it works as expected with any list of floats,<br>
like matrices, n-dimensional matrices or even trees of floats. The same<br>
happens with the addition (subtraction) of lists. I cannot expect to add two<br>
lists with different structures (like a vector and a bi-dimensional matrix)<br>
but OpenSCAD is able to add lists of floats with the same structure: [ 1,<br>
[2, 3] ] + [ 5, [5, 5] ] = [ 6, [7, 8] ] . It works even with void lists.<br>
<br>
As those more general cases are missing in the documentation, I can not rely<br>
on it as a feature. However, a lot of code I have been written (my<br>
Bezier/Spline library, for instance) benefits from that generality. If<br>
needed I can provide simple examples.<br>
<br>
So, my question is: could we rely on the current behavior of those operators<br>
as a feature? Is there a commitment with this feature for the future<br>
versions? This should be clarified and the documentation be expanded<br>
accordingly. I hope the answer be yes :)<br>
<br>
I have a couple of other issues like that. I will post about them later.<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://forum.openscad.org/Clarifying-behaviors-tp18492.html" rel="noreferrer" target="_blank">http://forum.openscad.org/<wbr>Clarifying-behaviors-tp18492.<wbr>html</a><br>
Sent from the OpenSCAD mailing list archive at Nabble.com.<br>
<br>
______________________________<wbr>_________________<br>
OpenSCAD mailing list<br>
<a href="mailto:Discuss@lists.openscad.org">Discuss@lists.openscad.org</a><br>
<a href="http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org" rel="noreferrer" target="_blank">http://lists.openscad.org/<wbr>mailman/listinfo/discuss_<wbr>lists.openscad.org</a><br>
<br>
<br>
</blockquote></div><br></div>