Home > Enterprise >  How can I choose algorithms in a function
How can I choose algorithms in a function

Time:09-17

the scenario likes this:

There is an algorithm called alg1, and another algorithm called alg2.

And there is an entry function called solve, how can I pass alg1 to solve then I can use alg1 to compute, and pass alg2 to compute with alg2?

solve(a, b, alg1) #return the results computed with alg1
solve(a, b, alg2) #return the results computed with alg2

Do I need to write the algorithms as functions?

CodePudding user response:

A typical elegant API could be based on the multiple dispatch mechanism and could look like this:

abstract type AbstractAlgo end
struct Algo1 <: AbstractAlgo end
struct Algo2 <: AbstractAlgo
    param::Int
end

function solve(a,b,alg::T) where T<:AbstractAlgo 
    throw("Algorithm $T is not yet implemented")
end
function solve(a,b,alg::Algo1) 
   println("solving...")
end 

Some tests:

julia> solve(1,2,Algo1())
solving...

julia> solve(1,2,Algo2(777))
ERROR: "Algorithm Algo2 is not yet implemented"

CodePudding user response:

In julia you can pass funcions as parameters, so:

function alg1(a,b)
...
end

solve(a,b,alg) = alg(a,b)

# calling solve
answer = solve(a,b,alg1)

Of course there are other ways, as transforming algs is structures and employing multiple dispatch, but the solution above should answer the question..

  • Related