Как стать автором
Обновить

Комментарии 7

Это не косяк. Так как F# должен обеспечивать взаимодействие с кодом на других .NET языках, которые кишат побочными эффектами, то использование ленивых вычислений по умолчанию весьма затруднено.

Есть явная ленивость:

let lazyValue = lazy (2 * 2)
let value = Lazy.force lazyValue

В strict языках Y-комбинатор формулируется по-другому — он принимает как аргумент не функцию a → a, а функцию (a → b) → (a → b):

let rec y f = f (fun x -> (y f) x)
let fib = y (fun f -> function
| 0 -> 0
| 1 -> 1
| n -> f (n — 1) + f (n — 2))
printfn "%i" (fib x)

У меня была идея передавать в каждую итерацию лямбду, содержащую продолжение; собственно, так и выглядела Лисп-версия Ы-комбинатора.

К Ф-Шарпу я пришел из Хаскеля, который ленив настолько, что его приходится заставлять вообще что-то считать :)

Вот вопрос — а Nemerle тоже активный?
Да, Nemerle тоже активный.
разве F# ленивый язык? о_О
он же активный
В нем есть конструкции для ленивых вычислений. Кроме того, тип seq вроде бы ленив.
круто, да, через год отвечать на сообщение… язык сам по себе не ленивый. ленивые конструкции можно где угодно создать.

МатМех что ли тоже?
>Через год отвечать на сообщение.
Ну, только дорвался до возможности комментировать.

>МатМех что ли тоже?
Нет.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории