%mathpiper,def="+;SumListSide" /* Addition */ 100 # + x_ <-- x; 50 # x_Number? + y_Number? <-- AddN(x,y); 100 # 0 + x_ <-- x; 100 # x_ + 0 <-- x; //100 # x_ + x_ <-- 2*x; 100 # x_ + n_Constant?*(x_) <-- (n+1)*x; 100 # n_Constant?*(x_) + x_ <-- (n+1)*x; //100 # Sinh(x_)+Cosh(x_) <-- Exp(x); 101 # x_ + - y_ <-- x-y; 101 # x_ + (- y_)/(z_) <-- x-(y/z); 101 # (- y_)/(z_) + x_ <-- x-(y/z); 101 # (- x_) + y_ <-- y-x; 102 # x_ + y_NegativeNumber? <-- x-(-y); 102 # x_ + y_NegativeNumber? * z_ <-- x-((-y)*z); 102 # x_ + (y_NegativeNumber?)/(z_) <-- x-((-y)/z); 102 # (y_NegativeNumber?)/(z_) + x_ <-- x-((-y)/z); 102 # (x_NegativeNumber?) + y_ <-- y-(-x); // fractions 150 # n1_ / d_ + n2_ / d_ <-- (n1+n2)/d; //200 # (x_Number? + y_)::Not?(Number?(y)) <-- y+x; //200 # ((y_ + x_Number?) + z_)::Not?(Number?(y) |? Number?(z)) <-- (y+z)+x; //200 # ((x_Number? + y_) + z_Number?)::Not?(Number?(y)) <-- y+(x+z); //200 # ((x_ + y_Number?) + z_Number?)::Not?(Number?(x)) <-- x+(y+z); // fractions 210 # x_Number? + (y_Number? / z_Number?) <--(x*z+y)/z; 210 # (y_Number? / z_Number?) + x_Number? <--(x*z+y)/z; 210 # (x_Number? / v_Number?) + (y_Number? / z_Number?) <--(x*z+y*v)/(v*z); // 220 # + x_List? <-- MapSingle("+",x); // this rule is never active 220 # (xlist_List? + ylist_List?)::(Length(xlist)=?Length(ylist)) <-- Map("+",[xlist,ylist]); SumListSide(x_, y_List?) <-- { Local(i,result); Check(y !=? [], "An arithmetic operation can't be done with an empty list."); result:=[]; For(i:=1,i<=?Length(y),i++) { Insert!(result,i,x + y[i]); } result; } 240 # (x_List? + y_)::Not?(List?(y)) <-- SumListSide(y,x); 241 # (x_ + y_List?)::Not?(List?(x)) <-- SumListSide(x,y); 250 # z_Infinity? + Complex(x_,y_) <-- Complex(x+z,y); 250 # Complex(x_,y_) + z_Infinity? <-- Complex(x+z,y); 251 # z_Infinity? + x_ <-- z; 251 # x_ + z_Infinity? <-- z; 250 # Undefined + y_ <-- Undefined; 250 # x_ + Undefined <-- Undefined; %/mathpiper %mathpiper_docs,name="+",categories="Operators" *CMD + --- arithmetic addition *STD *CALL x+y +x *PARMS {x} and {y} -- objects for which arithmetic addition is defined *DESC The addition operators can work on integers, rational numbers, complex numbers, vectors, matrices and lists. These operators are implemented in the standard math library (as opposed to being built-in). This means that they can be extended by the user. *E.G. In> 2+3 Result: 5 %/mathpiper_docs