You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							222 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
	
	
							222 lines
						
					
					
						
							4.0 KiB
						
					
					
				| // @flow
 | |
| 
 | |
| function last(...a: Array<number>): number {
 | |
|   return a[a.length - 1]
 | |
| }
 | |
| 
 | |
| function negation(a: number): number {
 | |
|   return -a
 | |
| }
 | |
| 
 | |
| function addition(a: number, b: number): number {
 | |
|   return a + b
 | |
| }
 | |
| 
 | |
| function subtraction(a: number, b: number): number {
 | |
|   return a - b
 | |
| }
 | |
| 
 | |
| function multiplication(a: number, b: number): number {
 | |
|   return a * b
 | |
| }
 | |
| 
 | |
| function division(a: number, b: number): number {
 | |
|   return a / b
 | |
| }
 | |
| 
 | |
| function factorial(a: number): number {
 | |
|   if (a % 1 || !(+a >= 0)) return NaN
 | |
|   if (a > 170) return Infinity
 | |
|   else if (a === 0) return 1
 | |
|   else {
 | |
|     return a * factorial(a - 1)
 | |
|   }
 | |
| }
 | |
| 
 | |
| function power(a: number, b: number): number {
 | |
|   return a ** b
 | |
| }
 | |
| 
 | |
| function sqrt(a: number): number {
 | |
|   return Math.sqrt(a)
 | |
| }
 | |
| 
 | |
| function max(...a: Array<number>): number {
 | |
|   return Math.max(...a)
 | |
| }
 | |
| 
 | |
| function min(...a: Array<number>): number {
 | |
|   return Math.min(...a)
 | |
| }
 | |
| 
 | |
| function comma(...a: Array<number | string>): Array<number | string> {
 | |
|   return Array.of(...a)
 | |
| }
 | |
| 
 | |
| const defaultMathSymbols = {
 | |
|   symbols: {
 | |
|     '!': {
 | |
|       postfix: {
 | |
|         symbol: '!',
 | |
|         f: factorial,
 | |
|         notation: 'postfix',
 | |
|         precedence: 6,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 1,
 | |
|       },
 | |
|       symbol: '!',
 | |
|       regSymbol: '!',
 | |
|     },
 | |
|     '^': {
 | |
|       infix: {
 | |
|         symbol: '^',
 | |
|         f: power,
 | |
|         notation: 'infix',
 | |
|         precedence: 5,
 | |
|         rightToLeft: 1,
 | |
|         argCount: 2,
 | |
|       },
 | |
|       symbol: '^',
 | |
|       regSymbol: '\\^',
 | |
|     },
 | |
|     '*': {
 | |
|       infix: {
 | |
|         symbol: '*',
 | |
|         f: multiplication,
 | |
|         notation: 'infix',
 | |
|         precedence: 4,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 2,
 | |
|       },
 | |
|       symbol: '*',
 | |
|       regSymbol: '\\*',
 | |
|     },
 | |
|     '/': {
 | |
|       infix: {
 | |
|         symbol: '/',
 | |
|         f: division,
 | |
|         notation: 'infix',
 | |
|         precedence: 4,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 2,
 | |
|       },
 | |
|       symbol: '/',
 | |
|       regSymbol: '/',
 | |
|     },
 | |
|     '+': {
 | |
|       infix: {
 | |
|         symbol: '+',
 | |
|         f: addition,
 | |
|         notation: 'infix',
 | |
|         precedence: 2,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 2,
 | |
|       },
 | |
|       prefix: {
 | |
|         symbol: '+',
 | |
|         f: last,
 | |
|         notation: 'prefix',
 | |
|         precedence: 3,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 1,
 | |
|       },
 | |
|       symbol: '+',
 | |
|       regSymbol: '\\+',
 | |
|     },
 | |
|     '-': {
 | |
|       infix: {
 | |
|         symbol: '-',
 | |
|         f: subtraction,
 | |
|         notation: 'infix',
 | |
|         precedence: 2,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 2,
 | |
|       },
 | |
|       prefix: {
 | |
|         symbol: '-',
 | |
|         f: negation,
 | |
|         notation: 'prefix',
 | |
|         precedence: 3,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 1,
 | |
|       },
 | |
|       symbol: '-',
 | |
|       regSymbol: '-',
 | |
|     },
 | |
|     ',': {
 | |
|       infix: {
 | |
|         symbol: ',',
 | |
|         f: comma,
 | |
|         notation: 'infix',
 | |
|         precedence: 1,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 2,
 | |
|       },
 | |
|       symbol: ',',
 | |
|       regSymbol: ',',
 | |
|     },
 | |
|     '(': {
 | |
|       prefix: {
 | |
|         symbol: '(',
 | |
|         f: last,
 | |
|         notation: 'prefix',
 | |
|         precedence: 0,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 1,
 | |
|       },
 | |
|       symbol: '(',
 | |
|       regSymbol: '\\(',
 | |
|     },
 | |
|     ')': {
 | |
|       postfix: {
 | |
|         symbol: ')',
 | |
|         f: undefined,
 | |
|         notation: 'postfix',
 | |
|         precedence: 0,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 1,
 | |
|       },
 | |
|       symbol: ')',
 | |
|       regSymbol: '\\)',
 | |
|     },
 | |
|     min: {
 | |
|       func: {
 | |
|         symbol: 'min',
 | |
|         f: min,
 | |
|         notation: 'func',
 | |
|         precedence: 0,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 1,
 | |
|       },
 | |
|       symbol: 'min',
 | |
|       regSymbol: 'min\\b',
 | |
|     },
 | |
|     max: {
 | |
|       func: {
 | |
|         symbol: 'max',
 | |
|         f: max,
 | |
|         notation: 'func',
 | |
|         precedence: 0,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 1,
 | |
|       },
 | |
|       symbol: 'max',
 | |
|       regSymbol: 'max\\b',
 | |
|     },
 | |
|     sqrt: {
 | |
|       func: {
 | |
|         symbol: 'sqrt',
 | |
|         f: sqrt,
 | |
|         notation: 'func',
 | |
|         precedence: 0,
 | |
|         rightToLeft: 0,
 | |
|         argCount: 1,
 | |
|       },
 | |
|       symbol: 'sqrt',
 | |
|       regSymbol: 'sqrt\\b',
 | |
|     },
 | |
|   },
 | |
| }
 | |
| 
 | |
| export default defaultMathSymbols
 |