2017-09-20 1 views
1

donc dans haskell j'ai les 2 fonctions suivantes en (ils sont en train d'exécuter certaines opérations mathématiques)Haskell - Passing fonction comme argument

cubicQ :: Float -> Float -> Float -> Float 
cubicQ a b c = (3*a*c - b**2)/(9*a**2) 

cubicR :: Float -> Float -> Float -> Float -> Float 
cubicR a b c d = (9*a*b*c - 27*(a**2)*d-2*b**3) 

Je dois faire un Cubiques troisième fonction qui a une exigence la fonction est de type Float -> Float -> Float et calcule sa sortie à partir de q et r, qui est la sortie pour cubicQ et cubicR. Comment passer les fonctions cubicQ et cubicR comme arguments q et r dans cubicS? Voici ce que j'ai essayé jusqu'à présent, mais je suis perplexe. Toute aide serait grandement appréciée.

cubicS q r = (r+ (q**3+r**2)**(1/2))**(1/3) 
    where q = (cubicQ a b c d) 
      r = (cubicR a b c) 
+1

Si '' cubicS' est de type Float -> Float -> Float', vous lui passez exactement deux paramètres, tous les deux de type 'Float'. Pas de fonctions, pas d'entiers, pas de liste, pas de bagels au fromage à la crème. –

Répondre

3

essayez ceci:

cubicQ a b c = (3*a*c - b**2)/(9*a**2) 
cubicR a b c d = (9*a*b*c - 27*(a**2)*d-2*b**3) 
cubicS q r = (r+ (q**3+r**2)**(1/2))**(1/3) 

f a b c d = cubicS (cubicQ a b c) (cubicR a b c d) 

main = do print $ f 1 2 3 4 

ou:

cubicS a b c d = (r+ (q**3+r**2)**(1/2))**(1/3) 
    where q = cubicQ a b c 
     r = cubicR a b c d 

ou:

cubicS a b c d = 
    let q = cubicQ a b c 
     r = cubicR a b c d 
    in (r+ (q**3+r**2)**(1/2))**(1/3) 

voir:

cubicQ :: Float -> Float -> Float -> Float 
cubicQ a b c = (3*a*c - b**2)/(9*a**2) 

cubicR :: Float -> Float -> Float -> Float -> Float 
cubicR a b c d = (9*a*b*c - 27*(a**2)*d-2*b**3) 

cubicS :: Float -> Float -> Float -> Float -> Float 
cubicS a b c d = 
    let q = cubicQ a b c 
     r = cubicR a b c d 
    in 
    (r+ (q**3+r**2)**(1/2))**(1/3) 

main = do print $ cubicS 1.1 2.2 3.3 4.4 

sortie:

9.736999e-2 

et si vous limité à cubicS être cubicS: Float -> Float -> Float:

cubicQ a b c = (3*a*c - b**2)/(9*a**2) 
cubicR a b c d = (9*a*b*c - 27*(a**2)*d-2*b**3) 
cubicS q r = (r+ (q**3+r**2)**(1/2))**(1/3) 

cureS a b c d = cubicS q r 
    where q = cubicQ a b c 
      r = cubicR a b c d 

main = do print $ cureS 1.1 2.2 3.3 4.4 
+0

Merci! mais je suis limité à cubicS étant cubicS: Float -> Float -> Float. Je ne peux pas le changer à quelque chose comme Float -> Float -> Float -> Float -> Float – Cindy

+0

alors vous avez besoin de 'cure a b c d = cubique q r où q = cubicQ un b c r = cubicR a b c d' J'espère que cela aide. –