UNPKG

js-slang

Version:

Javascript-based implementations of Source, written in Typescript

191 lines (190 loc) 8.65 kB
export type SchemeNumber = SchemeInteger | SchemeRational | SchemeReal | SchemeComplex; export declare enum NumberType { INTEGER = 1, RATIONAL = 2, REAL = 3, COMPLEX = 4 } export declare abstract class Match { result: boolean; constructor(result: boolean); abstract build(): SchemeNumber; } declare class IntegerMatch extends Match { result: boolean; value?: string | undefined; constructor(result: boolean, value?: string | undefined); isSigned(): boolean; build(): SchemeInteger; } declare class RationalMatch extends Match { result: boolean; numerator?: string | undefined; denominator?: string | undefined; constructor(result: boolean, numerator?: string | undefined, denominator?: string | undefined); build(): SchemeInteger | SchemeRational; } declare class RealMatch extends Match { result: boolean; integer?: string | undefined; decimal?: string | undefined; exponent?: Match | undefined; constructor(result: boolean, integer?: string | undefined, decimal?: string | undefined, exponent?: Match | undefined); build(): SchemeReal; } declare class ComplexMatch extends Match { result: boolean; real?: Match | undefined; sign?: string | undefined; imaginary?: Match | undefined; constructor(result: boolean, real?: Match | undefined, sign?: string | undefined, imaginary?: Match | undefined); build(): SchemeNumber; } export declare function isInteger(value: string): IntegerMatch; export declare function isRational(value: string): RationalMatch; export declare function isReal(value: string): RealMatch; export declare function isComplex(value: string): ComplexMatch; export declare function stringIsSchemeNumber(value: string): boolean; export declare let make_number: (value: string) => SchemeNumber; export declare class SchemeInteger { readonly numberType = NumberType.INTEGER; private readonly value; static readonly EXACT_ZERO: SchemeInteger; private constructor(); static build(value: number | string | bigint, _force?: boolean): SchemeInteger; promote(nType: NumberType): SchemeNumber; equals(other: any): boolean; greaterThan(other: SchemeInteger): boolean; negate(): SchemeInteger; multiplicativeInverse(): SchemeInteger | SchemeRational; add(other: SchemeInteger): SchemeInteger; multiply(other: SchemeInteger): SchemeInteger; getBigInt(): bigint; coerce(): number; toString(): string; } export declare class SchemeRational { readonly numberType = NumberType.RATIONAL; private readonly numerator; private readonly denominator; private constructor(); static build(numerator: number | string | bigint, denominator: number | string | bigint, force?: boolean): SchemeRational | SchemeInteger; private static simplify; getNumerator(): bigint; getDenominator(): bigint; promote(nType: NumberType): SchemeNumber; equals(other: any): boolean; greaterThan(other: SchemeRational): boolean; negate(): SchemeRational; multiplicativeInverse(): SchemeInteger | SchemeRational; add(other: SchemeRational): SchemeInteger | SchemeRational; multiply(other: SchemeRational): SchemeInteger | SchemeRational; coerce(): number; toString(): string; } export declare class SchemeReal { readonly numberType = NumberType.REAL; private readonly value; static INEXACT_ZERO: SchemeReal; static INEXACT_NEG_ZERO: SchemeReal; static INFINITY: SchemeReal; static NEG_INFINITY: SchemeReal; static NAN: SchemeReal; static build(value: number, _force?: boolean): SchemeReal; private constructor(); promote(nType: NumberType): SchemeNumber; equals(other: any): boolean; greaterThan(other: SchemeReal): boolean; negate(): SchemeReal; multiplicativeInverse(): SchemeReal; add(other: SchemeReal): SchemeReal; multiply(other: SchemeReal): SchemeReal; coerce(): number; toString(): string; } export declare class SchemeComplex { readonly numberType = NumberType.COMPLEX; private readonly real; private readonly imaginary; static build(real: SchemeReal | SchemeRational | SchemeInteger, imaginary: SchemeReal | SchemeRational | SchemeInteger, force?: boolean): SchemeNumber; private constructor(); private static simplify; promote(nType: NumberType): SchemeNumber; negate(): SchemeNumber; equals(other: SchemeComplex): boolean; greaterThan(other: SchemeComplex): boolean; multiplicativeInverse(): SchemeNumber; add(other: SchemeComplex): SchemeNumber; multiply(other: SchemeComplex): SchemeNumber; getReal(): SchemeInteger | SchemeRational | SchemeReal; getImaginary(): SchemeInteger | SchemeRational | SchemeReal; coerce(): number; toPolar(): SchemePolar; toString(): string; } declare class SchemePolar { readonly magnitude: SchemeReal; readonly angle: SchemeReal; private constructor(); static build(magnitude: SchemeReal, angle: SchemeReal): SchemePolar; toCartesian(): SchemeNumber; } export declare const infinity: SchemeReal; export declare const nan: SchemeReal; export declare function coerce_to_number(a: SchemeNumber): number; export declare function is_number(a: any): boolean; export declare function is_integer(a: any): boolean; export declare function is_rational(a: any): boolean; export declare function is_real(a: any): boolean; export declare function is_complex(a: any): boolean; export declare function is_exact(a: any): boolean; export declare function is_inexact(a: any): boolean; export declare function atomic_negate(a: SchemeNumber): SchemeNumber; export declare function atomic_inverse(a: SchemeNumber): SchemeNumber; export declare function atomic_equals(a: SchemeNumber, b: SchemeNumber): boolean; export declare function atomic_less_than(a: SchemeNumber, b: SchemeNumber): boolean; export declare function atomic_less_than_or_equals(a: SchemeNumber, b: SchemeNumber): boolean; export declare function atomic_greater_than(a: SchemeNumber, b: SchemeNumber): boolean; export declare function atomic_greater_than_or_equals(a: SchemeNumber, b: SchemeNumber): boolean; export declare function atomic_add(a: SchemeNumber, b: SchemeNumber): SchemeNumber; export declare function atomic_multiply(a: SchemeNumber, b: SchemeNumber): SchemeNumber; export declare function atomic_subtract(a: SchemeNumber, b: SchemeNumber): SchemeNumber; export declare function atomic_divide(a: SchemeNumber, b: SchemeNumber): SchemeNumber; /** * Important constants */ export declare const PI: SchemeReal; export declare const E: SchemeReal; export declare const SQRT2: SchemeReal; export declare const LN2: SchemeReal; export declare const LN10: SchemeReal; export declare const LOG2E: SchemeReal; export declare const LOG10E: SchemeReal; export declare const SQRT1_2: SchemeReal; export declare const numerator: (n: SchemeNumber) => SchemeNumber; export declare const denominator: (n: SchemeNumber) => SchemeNumber; export declare const exact: (n: SchemeNumber) => SchemeNumber; export declare const inexact: (n: SchemeNumber) => SchemeNumber; export declare const expt: (n: SchemeNumber, e: SchemeNumber) => SchemeNumber; export declare const exp: (n: SchemeNumber) => SchemeNumber; export declare const log: (n: SchemeNumber, base?: SchemeNumber) => SchemeNumber; export declare const sqrt: (n: SchemeNumber) => SchemeNumber; export declare const sin: (n: SchemeNumber) => SchemeNumber; export declare const cos: (n: SchemeNumber) => SchemeNumber; export declare const tan: (n: SchemeNumber) => SchemeNumber; export declare const asin: (n: SchemeNumber) => SchemeNumber; export declare const acos: (n: SchemeNumber) => SchemeNumber; export declare const atan: (n: SchemeNumber, m?: SchemeNumber) => SchemeNumber; export declare const floor: (n: SchemeNumber) => SchemeNumber; export declare const ceiling: (n: SchemeNumber) => SchemeNumber; export declare const truncate: (n: SchemeNumber) => SchemeNumber; export declare const round: (n: SchemeNumber) => SchemeNumber; export declare const make$45$rectangular: (a: SchemeNumber, b: SchemeNumber) => SchemeNumber; export declare const make$45$polar: (a: SchemeNumber, b: SchemeNumber) => SchemeNumber; export declare const real$45$part: (n: SchemeNumber) => SchemeNumber; export declare const imag$45$part: (n: SchemeNumber) => SchemeNumber; export declare const magnitude: (n: SchemeNumber) => SchemeNumber; export declare const angle: (n: SchemeNumber) => SchemeNumber; export declare const odd$63$: (n: SchemeInteger) => boolean; export declare const even$63$: (n: SchemeInteger) => boolean; export {};