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
			| 
								 
											3 years ago
										 
									 | 
							
								// @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
							 |