[Résolu] Haskell et invocation "dynamic" de fonction
Hello,
Est-ce que quelqu'un saurait si il est possible de faire une invocation de fonction qui serait choisie "au runtime"
Pour illustrer mon besoin, j'aimerais faire un programme qui prend un String
comme argument, et qui utilise cette String comme étant le nom de la fonction à invoquer.
Pour simplifier, disons que mon programme "addOrSub" prenne "sub" ou "add" comme seul paramètre, et qu'il doive additioner ou soustraire deux nombres (disons 5 et 3 coder en dur c'est égal ici...)
Pour le moment, j'arrive à ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
import System( getArgs )
add a b = a + b
sub a b = a - b
-- correspondance entre une string et une fonction
m = [
("add",add),
("sub",sub)
]
main = do
args <- getArgs
let arg = args !! 0
-- recherche de la première fonction dans la "m", correspondant à arg
let fonction = snd (filter (\it -> fst it == arg ) m !! 0)
-- invocation de la fonction avec 5 et 3
print $ show $ fonction 5 3 |
Ce que je souhaiterait, c'est de ne pas avoir à définir la liste "m", qui me sert de mapping entre le nom de la fonction et une String.
En java, j'utiliserais la reflection pour faire cela, mais en haskell, comment faire ???