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
|