Скажем, у меня есть наивности реализована функция так:Как сказать, что общее уничтожение подвыражения происходит или нет в GHC?
quadratic a b c = (ans1, ans2)
where
ans1 = ((-b) + sqrt (b * b - 4 * a * c))/(2 * a)
ans2 = ((-b) - sqrt (b * b - 4 * a * c))/(2 * a)
Есть несколько одинаковых подвыражения. Как я могу сказать, не читая ядро, что происходит общее уничтожение подвыражения или нет, и к каким частям этого?
Я считаю, что «читая ядро» является ответом. Почему бы вам не сделать это? Вы можете угадать, вставив функции из 'Debug.Trace', но я бы не стал полагаться на это. – jberryman
@jberryman Существуют ли правила большого пальца, указывающие, какой код вероятен или вряд ли будет оптимизирован? – rityzmon
Несвязанный, но недетерминированность моделируется списками, а не кортежами. 'квадратичный a b c = [ans1, ans2], где ...' – chepner