For a product similar to Mathematica, look at Maple license cost. Are they overcharging too?
For people who need that kind of products, they're worth every penny spent.
@Hermetian I'm not very familiar with Mathematica, but looking at your code, I don't see anything very Mathematica-specific. Nothing about math function manipulation or integral approximations or anything like that. It just looks like string manipulations with regular expressions.
I really think you should look into doing this in Python instead. Python is a free (as in beer and speech) language which is very popular with scientists, among others. I'd say it's at least as popular with scientists as Fortran was back in the day, but much easier to learn and use. It tends to be one of the faster high-level languages, and you don't have to pay for
unlimited threads. (I think that's the same as "kernels".) It also has libraries available for many things. I found
one called BioPython that seems up your alley, though I don't know if it applies to this particular project.
You seem familiar with Mathematica syntax. If you're generally familiar with procedural programming languages, you might find it instructive to skim
this page for an idea of Python's syntax. I didn't look deeper to see if the other resources are useful.
The main different things about Python (which I find annoying) are:
- Grouping instructions, e.g. for an if or a loop, is done by a colon followed by indenting following lines. I see Mathematica does this with [square brackets]. (Most languages do this with {curly braces}; some say "end" at the end of a block instead.) Python's method also means you can't auto-indent - since the indent is integral you have to manually keep track of it yourself.
- For loops only apply to lists, like "foreach" in other languages. You can generate a numeric list with range() to work like most languages' for loops. But I don't see a for loop in your code so you may not care.
- There is usually one canonical, "Pythonic", socially acceptable way to do any given thing you want to do. I find this restrictive and overbearing, but I guess it makes reading other people's code easier.