<html> <HEAD> <title>Yacas future plans</title> <h1>Yacas todo list</h1> </head> <body BGCOLOR=WHITE> <FONT face="Helvetica" size="3"> Current: <ul> <li> Test code, documentation for multivariate polys. <li> Solve broken, and not as powerful as if can be. <li> Clean up this file: prioritize. <li> Document some long-standing undocumented functions. </ul> <H1>Future plans</h1> This is a todo list of things I want to get out of the way before version 2.0. <h1>emergencies</h1> <ul> <li> Support for scientific notation in anumber. <li> Multi-line epoc version. <li> revisit MathPower: MathPower(0,0.5) locks up. <li> revisit all analytic functions implemented in anumber, including log, sin, arctan, etc. <li> remove the final references to stdlib in the code. <li> integrating x ln x goes into infinite recursion. <li> Improved complex numbers. Ln(x) for x < 0 not working yet. <li> put Nl() in a common place. <li> test Apart for polys. This might have to be adjusted by adding using the same mechanism used for the integer version. <li> loading dll only once (defload mechanism), DllUse iso DllLoad <li> the refcount 0xffff problem? Problem is actually the intermediate expression swell. <li> improved TraceExp <li> multivariate polynomials, groebner bases. <li> Ascii graph plotter. <li> Ascii help when no browser is around <li> Taylor on functions containing Abs/Sign can not be trusted. </ul> <ul> <li> better error reporting. <ul> <li> show function the error occurred in <li> if the error was based on an argument type, show the argument <li> If the error was on the number of arguments, specify number expected and number received. <li> To detect recursion problems, show the stack (ar the last few items in the stack). Show it in a form Function(internal) Function(rule number) Function And show only the last few. </ul> <li> Need to improve debugging facilities and tracing facilities. Would be good to see how yacas is stepping through rule applications. <li> Sin(Pi/6) etc. <li> Allow TSimplify() on TSum()..-TSum().. <li> Sin(Pi/5) = Sqrt(5-Sqrt(5))/Sqrt(8) <li> Fix the Debian package to not require the new gmp. <li> External function API, and plugin interface (dynamic link libraries). <li> <H2>Bugs to be fixed</H2> <UL> <li> factorization of poly's can not do all polys yet. As a consequence: <UL> <li> integrals over rational polys don't always work correctly. <li> partial fraction expansion does not always return correct result (esp. the example in MCA). <li> roots of a polynomial doesn't work yet. <li> eigenvalues of a matrix doesn't work fully yet </UL> <li> BUG: InverseTaylor not working correctly for Sin and Tan??? <li> BUG: complex^float. <li> Mod(a,b) generates an error "Argument is not a list" if a or b or both are undefined (I expected it to return unevaluated). Mod(-4,-3) generates 1 but Mod(-4,-3) generates -1. I'm not sure what the "correct" meaning of Mod is for negative moduli bases, but the answer should in any case be non-negative. Mod(a,b) is defined as the smallest non-negative number c such that a-c is divisible by b. </UL> <H2>Engine functionality</H2> These are the items specifying functionality that can not be implemented from within Yacas, so have a rather high priority if the functionality is needed. <UL> <li> Define the Local,.. functions based on their Macro counterparts, in the scripts. <li> Remove the {} [] [[]] brackets support from the engine to the scripts. <li> Faster numerical calculation, by caching the internal format, and only converting back to ascii when needed. <LI> Add Karatsuba multiplication. <LI> also define a Head and Tail for arrays, and append/concat/ insert/delete/copy. This will ease swapping between lists and arrays. <LI> Allow for type convertors in pattern matchers. For instance: IsUniVar, should be combined with CanBeUni and NormalForm to get the correct one back. <LI> A plugin interface for yacas, so it can be extended with external libraries (fast numerical algorithms for instance). <li> A RuleBaseDefined-like function that returns a list of defined arities. <li> HoldEvaluation(function-list)body that holds evaluation of these functions. </UL> <H2>Math high priority</H2> This is the real meat, the functionality that should be in Yacas 2.0. <ul> <li> render matrices and square roots nicely too, in PrettyForm. <li> FindZeroes (polynoms and other functions) <li> redivide some code ('newly') <li> make suchthat more powerful, so it simplifies sin(x)=cos(x) to tan(x)=1 to x/Pi/4 <li> groebner bases <li> see if using arrays for matrices speeds up things. <li> Fix CanBeUni so that it deals correctly with 1/c <li> Test script has been disregarded recently. Make a tests subdir, install it also, with a lot of small files that can be loaded, each implementing some tests. <li> EquateCoefs equate coefficients in two polys, and return as list. <li> /. as with mathematica, treat args as locals. <li> allow solve to return a list usable in /. <li> matrix^negative is inverse^positive <li> BesselJ <li> Get started on differential equations: first order <li> try support for sparse objects (matrices, vectors, polynomials). <li> try support for iterators. <li> support for Atom("a"):=2; </ul> <H2>Documentation</H2> The documentation can be improved. <UL> <li> Add more of a general overview: <ul> <li> what is Yacas? How did it come into existence? Why did I write it? Who is it for? Why no user interface? Why no plotting? </ul> <li> document the algorithms used, and expand on all of the functions currently implemented. <li> separate manual chapter on tensors. (Serge? Is it going to change?). TSimplify and TExplicitSum, TD, X <li> chapter on unix tools. yacas_client, Vi, GnuPlot <li> document the source code. <li> mention the use of lists for passing multiple arguments. <li> document HoldArg in combination with <-- <li> ~/.yacas_history and ~/.yacasrc <li> document the following commands: <UL> <li> ExpressionDepth, SylvesterMatrix, PAdicExpandInternal, GetPrimeFactors, Rem, Roots, Apart, Together <li> UnHoldable, GcdReduce, ApplyPure DestructiveAppendList, PatternMatches, PatternCreate, RuleBaseDefined, RuleBaseArgList, FindFunction, TemplateFunction, HoldArgNr, Lambda (in combination with Apply), Primes, OpLeftPrecedence, OpRightPrecedence, MapArgs, Substitute, <li> quit, Version(), GarbageCollect() <li> V, GetExtraInfo, SetExtraInfo <li> %, |, &, ^, if, else (else binds to the last if) <li> DivPoly, RootsWithMultiples, <li> OdeSolve <li> Deriv, Berlekamp, ExtendedEuclidean, ExtendedEuclideanMonic <li> IsVariable <li> the fact that VarList can also be called with a second argument, a filter predicate. <li> Extended predicates in the pattern matcher (needs to be explained). <li> CTokenizer(), DefaultTokenizer() <li> II, ReII, ImII, IsComplexII <li> XmlTokenizer, XmlExplodeTag <li> BSearch, FindIsq Search for a zero in a monotonously growing function. BSearch returns -1 if not found, FindIsq returns the insertion point. <li> MultiDivide, MultiGcd, Groebner </UL> <li> Add a 'History of Yacas' to the introduction. <li> Explain what is destructive about the Destructive... routines, why they are there, and when to use them. <li> Do slightly more on pure functions, to show why they are useful. Show for example Select. <li> Explain what Simplify currently does (internal algorithm). <li> Vi: edit will try to edit a file, or if the argument passed is a function, it will try to edit the file the function is defined in. It will try to do so by invoking vi. It finds the function by scanning the *.def files that have been reported to the system. To be really useful, you need to go to the directory containing the original files, to edit the original files. <li> Html... commands. <li> FakeDb... functions. <li> some blurb on the pattern matching/multivirtual functionality. </UL> <H2>Engine internal improvements</H2> These are nice to haves in the engine. <UL> <li> An environment object. Within(environment)body should then evaluate something within the environment. Together with Apply this would allow for packages. <li> engine-side apply "op" for speed. <li> faster Pi() calculation <li> LispCleanupStack: implement LocalLispString and LocalLispPtr. <li> Clean up c++ code a little: Remove ALL TODO's and write javadoc-able-comments in the source code. <li> allow access to the rules database from within yacas, for showing the rules to the user. <li> optimize string concatenation. <li> Try to find all the places that can use the CArrayGrower with the iArrayOwnedExternally set. <li> it seems I can still optimize InternalEval <li> Finish arb. math stuff. (ASin, Acos, ATan) </UL> <H2>Math nice to have</H2> <ul> <li> Clean up TrigSimpCombine and Simplify in such a way as to make the code reusable for other simplifications. <li> QSort <li> BinarySearch (array!) <li> FourierTransform? <li> LaplaceTransform? <li> Singular Value Decomposition. <li> FortranForm <li> Resultants <li> some DE algos. <li> implement Diff(f(x),x) <li> Try all the 131 Wester tests. </ul> </FONT> </BODY> </HTML> 6657552 n.