Для функции, которая использует тот же самый операнд, например. +
или *
несколько раз, как он оценит его?Какой порядок Haskell оценил бы 2 операнда одинакового приоритета?
Например, в следующем коде:
prodOfThree :: Int -> Int -> Int
prodOfThree a b c = a*b*c
Как бы следующее оценивать?
prodOfThree (2+3) 4 2
Это, насколько я получил:
=> (2 + 3) * 4 * 2
=> 5 * 4 * 2
И тогда я уверен в том, будет ли умножать 5*4
первый, 4*2
первый или 5*4*2
все сразу.
Не забывайте, что оптимизирующий компилятор может выбрать любой порядок оценки для ассоциативного оператора, такого как '*'. Дальше 'f 1 * f 2 * f 3' может выполнять все три вызова' f' сначала (в любом порядке), а затем выполнять умножения (в любом порядке) или смешивать как-то: приоритет не связан с порядком оценки аргументов. (Хотя, конечно, необходимо учитывать причинность данных) – chi