UNPKG

algebrite

Version:

Computer Algebra System in Coffeescript

43 lines (36 loc) 726 B
# Push expression factors onto the stack. For example... # # Input # # 2 # 3x + 2x + 1 # # Output on stack # # [ 3 ] # [ x^2 ] # [ 2 ] # [ x ] # [ 1 ] # # but not necessarily in that order. Returns the number of factors. # Local U *p is OK here because no functional path to garbage collector. factors = (p) -> h = tos if (car(p) == symbol(ADD)) p = cdr(p) while (iscons(p)) push_term_factors(car(p)) p = cdr(p) else push_term_factors(p) return tos - h # Local U *p is OK here because no functional path to garbage collector. push_term_factors = (p) -> if (car(p) == symbol(MULTIPLY)) p = cdr(p) while (iscons(p)) push(car(p)) p = cdr(p) else push(p)