В качестве побочного вопроса здесь Что проще всего способ сделать что-то вроде делегирования многоадресной рассылки в F # Я думаю, может быть, лучше поднять полный вопрос с правильным заголовком.
Эта версия не вызовет рекурсии: (Здесь notify
кажется неизменным в d
)
let mutable notify = fun x -> x
let wrap f i = f(i); i
let a x = printf "%A" x
let d = (notify >> (wrap a)) // point free
notify <- d
notify "ss"
Эта версия будет. (Здесь notify
кажется изменяемым в d
)
let mutable notify = fun x -> x
let wrap f i = f(i); i
let a x = printf "%A" x
let d x =
(notify >> (wrap a)) x // normal function
notify <- d
notify "ss" // endless loop
Еще одна неудачная версия:
let mutable notify = fun x -> x
let wrap f i = f(i); i
let a x = printf "%A" x
let d =
fun x -> (notify >> (wrap a)) x // Here
notify <- d
notify "ss" // endless loop
Где я могу найти какие-либо рекомендации или дополнительные ресурсы, объясняющие, почему у нас такое несоответствие в поведении. Связано ли это с конкретным компилятором/языком или для него существует теория, применимая ко всем функциональным языкам?