Automatic Equation and Inequation evaluation.

monarch_dodra monarchdodra at gmail.com
Sat Jun 15 05:36:25 PDT 2013


On Saturday, 15 June 2013 at 11:44:03 UTC, Carlos wrote:
> On Saturday, 15 June 2013 at 08:46:13 UTC, John Colvin wrote:
>> On Saturday, 15 June 2013 at 02:05:00 UTC, Carlos wrote:
>>> I'm interested in this kind of functionalities; Does D have
>>> something on this ?
>>>
>>> I thought about something like a "eval" function that would 
>>> use
>>> specified algorithms.
>>> something likes this
>>>
>>> import std.stdio, std.math, std.eval;
>>>
>>> void main()
>>> {
>>> eval(Real; a+b^^x+c=56){
>>> algor.brute(&result);
>>>      }
>>> writeln("Positive value is : ", result);
>>> }
>>
>> It's not clear what that would do from your example. I presume 
>> a, b and c are defined somewhere and eval solves for x?
>
> algor.brute does the work. IF you know that algorithm you would 
> know what it does.
> Another question would be if this way of coding makes sense to 
> you.
>
> This is what the "eval" function does ( in theory ), It takes 
> The words : Real, Rational, Irrational or R, Q , Q' and from 
> there is defined which numerical group is going to be used for 
> the evaluation. Then it identifies the operators and variables 
> and defines the equation in a format like a text format with a 
> end file character in the end so equations can be as long as 
> you want. After that between {algor.(name)} in name you call 
> the algorithm you want to use for the evaluation there can be 
> predefined algorithm with D but maybe you can define your own 
> algorithms.
>
> What do you think does this makes sense or would you implement 
> it other way ?

D provides no such thing. AFAIK, there is nothing in Phobos 
provided that does it either.

It should be doable, where the second argument is a string. 
Something like:
auto eq = Equation(Real, "a+b^^x+c=56");
auto result = Equation.brute();

I think it would quite a specialized numerical library though, so 
I don't think it would find its way into the standard library.

I'm not sure any such D Library exists. You'll either have to 
port an existing library, or link with a C/C++ existing library.


More information about the Digitalmars-d mailing list