exponentialSymbols.js.flow 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // @flow
  2. function factorial(a: number): number {
  3. if (a % 1 || !(+a >= 0)) return NaN
  4. if (a > 170) return Infinity
  5. else if (a === 0) return 1
  6. else {
  7. return a * factorial(a - 1)
  8. }
  9. }
  10. function power(a: number, b: number): number {
  11. return a ** b
  12. }
  13. function sqrt(a: number): number {
  14. return Math.sqrt(a)
  15. }
  16. const exponentialSymbols = {
  17. symbols: {
  18. '!': {
  19. postfix: {
  20. symbol: '!',
  21. f: factorial,
  22. notation: 'postfix',
  23. precedence: 6,
  24. rightToLeft: 0,
  25. argCount: 1,
  26. },
  27. symbol: '!',
  28. regSymbol: '!',
  29. },
  30. '^': {
  31. infix: {
  32. symbol: '^',
  33. f: power,
  34. notation: 'infix',
  35. precedence: 5,
  36. rightToLeft: 1,
  37. argCount: 2,
  38. },
  39. symbol: '^',
  40. regSymbol: '\\^',
  41. },
  42. sqrt: {
  43. func: {
  44. symbol: 'sqrt',
  45. f: sqrt,
  46. notation: 'func',
  47. precedence: 0,
  48. rightToLeft: 0,
  49. argCount: 1,
  50. },
  51. symbol: 'sqrt',
  52. regSymbol: 'sqrt\\b',
  53. },
  54. },
  55. }
  56. export default exponentialSymbols