Я возился с fix
, и после беспорядка с ним я встретил какое-то странное поведение, а именно, что 0 * undefined
- *** Exception: Prelude.undefined
и undefined * 0
- 0
. Это также означает, что fix (0 *)
составляет *** Exception: <<loop>>
, а fix (* 0)
- 0
.
После игры с ним кажется, что причина кроется в том, что нетривиально сделать это короткое замыкание в обоих направлениях, поскольку это не имеет особого смысла, без каких-либо странных параллельных вычислений и начинается с первый не-нижний.
Является ли это вид вещей в других местах (рефлексивные функции, которые не являются рефлексивными для нижних значений), и на что я могу надежно полагаться? Также есть практический способ сделать так, чтобы (0 *)
и (* 0)
оценивались до нуля независимо от переданного значения.