i like the pretty-print entry it offers where it will draw the roots, fractions and formulae in a mathematical way as you enter and edit them, but you can switch this off if you hate it.
there is a numerical integrator and solver but no symbolics (like the ti-89) at all. the supported data types are strings, reals, complex numbers, matrices and lists. unfortunately, the data types are not truly integrated in an object model. for example, you can only put real and complex numbers in memories, which are restricted to variables a-z and you cant make a list of anything but numbers.
nevertheless, operations on these data types are fairly complete. you can do matrix arithmetic, add numbers to matrices, square root a list and so on. lists and matrices are separately named as L1 thru L6 and matA thru matJ. complex numbers work with powers, roots, simple ops and logs but not, it appears, with trigs. hyperbolic functions refuse complex too, which is odd because e^x supports them.
the programming model is BASIC, slightly altered so you have to write a+1=>a instead of A=A+1 (the latter would be a comparison). its not procedural and you cant have local variables. apart from that, the usual suspects are there like for/next, while/wend, gosub and label. there are no line numbers.
you can still achieve quite a lot, since you can use all the native data types in the programs and it lets you write and manage several programs giving each names.
some significant limitations with the program language are that you can't call one program from another as a subroutine and you dont have local variables. even if you could call another program, you would have to be sure not to step on global variables which are restricted to the memories a-z. also, it seems, you cant use a program inside the solver, or the grapher (although you can write a program to plot graphs).
this program is taken from humidity calculation. to calculate the water
vapour pressure in equilibrium with pure water in an ideal gas, given its dewpoint temperature (deg C)
and the inverse operation, ie calculate the temperature given the pressure.
Input "V-WAT(1) OR T-WAT(2)", A
i transcribed the program as it appears on the unit. there are probably some optimisations, but some of this exercise was to see how easy it was to program.
firstly, i think the program comes out fairly abrasive and fairly unclear. some of that will be my fault because it could be tidier, but then i have had to use gosubs with assumed parameters placed in memories (T in this case). it would have been nice to make LabelA a functional subroutine with a local T parameter.
secondly, LabelB (ie the inverse operation) is a simplified newton solve of LabelA. it would have been nice to be able to call upon the inbuilt solver here. then i could have two programs instead of one with a pointless selector at the beginning. it would be nice to use the menu system for the selector (i dont think you can do this).
on the plus side, you could tidy up the input and output considerably and once in the machine, it runs quite fast and the inverse operation, even though coded manually, returns quickly.