Как уже сообщали другие, бесконечный цикл возможен через хвостовые рекурсии .
Например, loop()
будет эффективно работать как бесконечный цикл (в постоянном стеке)пробел), поскольку компилятор может оптимизировать хвостовой рекурсивный вызов loop
в конце.
let loop() = do {
println("foo")
loop()
}
Но
- это бесконечный цикл, неправильный настрой для функциональногопрограммирование?
все еще имеет смысл.Рассмотрим пример Windows-API с бесконечным циклом.Это совсем не функционально.Помните - функционал означает мышление в значениях (и что они означают ).Поэтому лучше использовать реактивный подход, основанный на событиях, подобный этому [Псевдофункциональный код]
(onClick form1)
|> Event.subscribe (\pt-> do { print $ "I was clicked at " ++ (show pt) })
Так что
это не кажется мне функционаломпрограмма / операционная система может продолжать работать сама по себе
- это технически неправильно - вы можете реализовать бесконечные циклы - но часто нет (функциональной) точки в выполнениитак.Зачем это нужно, кроме какого-то IO-опроса?Преобразование значений чисто функциональным способом должно перестать быть значимым.