Комбинаторы — это просто!: различия между версиями
Содержимое удалено Содержимое добавлено
Строка 369:
<code>free :: String -> Combinator -> Bool
free x (Var y) = x == y
free x (App e1 e2) = free x e1 || free x e2
free x (Lam y e) | x /= y = free x e
| x == y = False</code>
Всё в полном соответствии с математическим определением.
Строка 384:
<code>transform :: Combinator -> Combinator
transform (Var x) = Var x
transform (App x y) = App (transform x)
(transform y)
transform (Lam x (Var y))
transform (Lam x (l@(Lam _ _))) = transform (Lam x (transform l))
transform (Lam x (App e1 e2)) = App (App s (transform (Lam x e1)))
(transform (Lam x e2))</code>
Видно, что определение этой функции полностью совпадает с описанием
|