Z^3 Language Documentation

Revision as of 10:47, 21 November 2019 by Joseph (talk | contribs) (→‎Operators)

<< Z3 home

Motivation

The power of a language is almost entirely in the notations and simplifications that are provided. Kenneth Iverson in his paper (http://www.eecg.toronto.edu/~jzhu/csc326/readings/iverson.pdf Notation as a Tool of Thought) details the importance of good notation to assist making thought easier.

z^3 expands on Javascript notations, and then enhances the notation to allow easy expression and simplicity.

Apart from a rich operator and notation set, the motivation of the z^3 language is to be as close to normally used mathematical notation (such as Σ, !, .. ,etc.) as commonly used.

Assignment Operators

z^3 allows assigning values to the left as well as to the right using <== and ==> operators. This allows better expressivity for more logical thinking.

a <== 23; 23 ==> a;

a <== 23; is equivalent to a=23; and both notations are equivalent in z^3.


:= : Quick Function Creation Operator

The quick function creation operator in z^3 ( := ) is similar to the => operator in Javascript. However, the advantage of := operator is that the parameters are not named explicitly (and is autodetected). For example to define a function such as v=u+a*t, v:=u+a*t is sufficient, and the parameters u, a and t are auto detected.

Any variable names with lowercase (such as ab, cde, etc) with less than 3 characters in length, is considered to be a local variable. All other names (including any longer variable lowercase names) are checked to see if there is a similar name already in a higher or global scope, and in which case, will not be treated as a local variable.

The => function definition operator in normal Javascript, differs slightly. Hence to define a function such as v=u+a*t, in Javascript (as well as z^3), it would require us to indicate it as v=(u,a,t)=>u+a*t;

The := operator in z^3 hence allows avoiding explicitly repeating the parameter names again in the argument list and function body.

v:=u+a*t and v=(u,a,t)=>u+a*t; both are equivalent to

  function v(u,a,t)
  { 
     return(u+a*t)
  }


@: Function Apply Operator

1..100@SIN

~: Transpose Operator


[[[1..10]~]~]~

↑ and ↓: Ascending and Descending Operator

	
	MAGICSQUARE(5)!
	(1..100)↓
	(1..100)↑

⧓,⧒,⧒ and ⋈: Between Operators

	a=-1;
	⧓(1,a,30)
	a=29;	
	⧓(1,a,30) //between g
	
	a=31;
	⧒(1,a,30) //xlbetween g
	a=30;
	⧒(1,a,30) //xlbetween g
	
	⧒(1,2,30) // xlb g
	⧒(1,1,30)
	
	a=29;
	⋈(1,-1..31,30);
	
	⧓(1,-1..5,4);
	
	[
		⧓(1,1,30),
		⧓(1,0,30),
		⧓(1,10,30),
		⧓(1,31,30),
		⧑(1,29,30),
		⧑(1,30,30),
		⧑(1,1,30),
		⧑(1,30,30),
		⋈(1,1,30),
		⋈(1,3,30)
	]

√: Square Root, Cube Root, Fourth Root and Nth Root Operators

	√(3+34)
	∛(27.01)
	√√64
	ROOTNTH(1..10,4) 
		// root is first parameter
	NTHROOT(1..10,4)
		// root is second parameter
	
	NTHROOT(1..100,2)
	NTHROOT(1..100,4)
	ROOTNTH(1..100,2)
	ROOTNTH(1..100,4)
	3√81

Logical Statements

If Statements

    a=3;
    (a<0)::{"whatever"},
    {
		!(a>4)::
			{"whateverelse"},
			{"whateverelseleft"}
    }  
	
    (a>4)::
	{"whateverelse"},
	{"whateverelseleft"}
			

   (b<0)::b=34,b=345;
   is equivalent to 
   if(b<0)
   {
      b=34;
   }
   else
   {
      b=345;
   }

   Both notations are equivalent and will work in z^3.

Switch Statements

Apart from the conventional Javascript switch statement syntax, z^3 enhances language simplicity with a new style.

The new z^3 switch statements syntax is as follows.


	discriminant:::
	{
           x, y:: 
        	  /*statements to be executed if x or y is true*/
        	  /*Break is automatically added. */
        	  /*Simply add an empty statement using a simple extra semicolon (;)) */
            ,
	   z:: 
        	  /*statements to be executed if z is true*/
            ,
	   default::
	}
For example,
	b=0;
	c=343;
	fruits="mango";
	fruits:::
	{
        "apple","tomato":: 
        	   b++;
        	   c=3.4;
           ,
	"mango":: 
        	   b=34905; 
                
            ,
        default::
        	
                b=45.6;
            
	}
	[b,c];  
	
	switch(a)
	{
		case b:
		case c:
			break;
		default:
			break;
	}

Both notations work in z^3

Loops

	a=1;
	do
	{
		a++
	}
	until(a>20); // do while(!condition)
	a; // here this will be 21, since !condition is checked like a do while loop.
	
	a=11;
	b=45;
	because(a<b)
	{
		a++
		OUTPUT(a)
	}
	
	a=11;
	do
	{
		a++
	}
	unless(a==11); 
	a;


Function Declarations

	function y(x)
	{
		∵(x<345)
		{
			∴(x+3434)
		}
		∵(x>345)
		{
			∴(x-3434)
		}
	}
	y(13);

The letter Ƒ can also be used instead of the full term function.
	
	Ƒ y(x)
	{
		∵(x<345)
		{
			∴(x+3434)
		}
		∵(x>345)
		{
			∴(x-3434)
		}
	}
	y(13);

Existential Quantification

	a=1..100;
	∀a("x<810")
	∃a("x<810")
	∄a("x<810")
	
	a=1..100;
	[∀a("x<810"),∃a("x<810"),∄a("x<810")]
	a=1..100;
	[∀a("x<810"),∃a("x<810"),(!∄a("x<0"))]
	
	a=1..100;
	b= ∀a("y*2<200");
	b.result
	
	a=1..100;
	b= ∀a("y*2<=50");
	a.pick(b.result)
	
	//make a pick operator based on a similar array of true false. or non-existant to get the values out.
	//PICK
	
	a=1..100;
	b= ∀a("y*2<50");
	a.pick(b.result)
	


List of Operators


+,  -,  *,  /, ^, %	 - Arithmetic Operators
| |    - Array Function and Creation Operator
..     - Arithmetic and Geometric Series Creation
...    - Arithmetic and Geometric Series Creation	
@      - apply to
#      - Series or Special Case Qualifier for Dates, Calci  Cells, and Sequences, etc.
##     - Prefix used to indicate long variable names with spaces. 
         (e.g., ##Speed of the Car=34, which gets translated to SpeedoftheCar = 34;)
<<<    - Member or Variable Assignment
()     - Function Call
[]     - Set Creation
       - Object Set 
       - Set Object Membership
.      - Member Function Dereferencing.	
. mf   - Member Function
.$ mf(function, parameters)   - Element-wise Function Application
.$$ mf (special	        – Row-wise Function Application
.$$$ mf (special) 	– Column-wise Function Application
.$_ mf (special)	- Cumulative Function Application (all)

::     - If
:::    - switch

=     - Assignment to the left
<==   - Assignment to the left
==>   - Assignment to the right
:=    - Quick function definition operator. 

All operators in Javascript, also have the same meaning in z^3, except binary operators such as |, & and ~. 
Binary | is used to indicate matrix boundaries, and is replaced with |||.
Binary & is used to indicate matrix boundaries, and is replaced with &&&.
Binary ~ is used to indicate matrix boundaries, and is replaced with ~~~.

Short Cut Keys

CTRL+G - to convert into Greek Code
CTRL+U - Converts SIGMA to Σ
SHIFT+ENTER- Gives Parameter Expansion
Double tap SHIFT - Toggle Capital and Small Letter [Ex: Convert FRACTAL to fractal and vice verse]
CTRL+SPACE - Function Listing


<< Back to Z3 home