K
Size: a a a
K
МБ
a, который справа, должен передаваться в контекст (как параметр), в котором живёт a, написанный слева. Это обязательно два разных a.K
let a = s ++ a объявит бесконечный список a из повторяющихся списков sYS
МБ
let a = s ++ a объявит бесконечный список a из повторяющихся списков sa одно и то же слева и справа. Слева от равно a - имя переменной (просто лексема), а справа - переданное через это a значение.K
fix f = x where x = f x, что является определением fix как в хаскелле, та к и у меня. Не вижу смысла городить отдельную let rec-конструкцию. Как мне кажется, в ocaml/F# let rec есть только потому, что они не ленивые и порядок объявлений в let-блоке имеет значение.МБ
fix f = x where x = f x, что является определением fix как в хаскелле, та к и у меня. Не вижу смысла городить отдельную let rec-конструкцию. Как мне кажется, в ocaml/F# let rec есть только потому, что они не ленивые и порядок объявлений в let-блоке имеет значение.K
fix f =
let x = f x
in x
K
some p = do
x <- p
xs <- many p
many p = some p <|> return []
МБ
K
МБ
a. Первое вхождение - это имя, как у переменной в функции, а второе - это как значение, полученное через fix. И нужно это учитывать. Иначе трэшак начнётся, как в первых ЛиспахK
МБ
МБ
K
K
K
let rec foo = ... and bar = ... in ..., у меня делается через letDP

K