Für eine Funktion, die denselben Operanden verwendet, z. +
oder *
mehr als einmal, wie wird es bewerten?In welcher Reihenfolge würde Haskell 2 Operanden gleicher Priorität auswerten?
Zum Beispiel in dem folgenden Code:
prodOfThree :: Int -> Int -> Int
prodOfThree a b c = a*b*c
Wie würde die folgende bewertet werden?
prodOfThree (2+3) 4 2
Dies ist so weit ich habe:
=> (2 + 3) * 4 * 2
=> 5 * 4 * 2
Und dann bin ich nicht sicher, ob es 5*4
vervielfachen würde zuerst, 4*2
erste oder 5*4*2
alle auf einmal.
Vergessen Sie nicht, dass ein optimierender Compiler eine beliebige Reihenfolge der Auswertung für einen assoziativen Operator wie '*' wählen kann. Ferner kann "f 1 * f 2 * f 3" alle drei Aufrufe an "f" zuerst (in beliebiger Reihenfolge) ausführen und dann die Multiplikationen (in beliebiger Reihenfolge) ausführen oder beide irgendwie mischen: die Vorrangstellung steht in keinem Zusammenhang mit der Bewertungsreihenfolge der Argumente. (Die Datenkausalität muss natürlich respektiert werden) – chi