我的尝试目前是这样的:如果我有(.) const const
。第一
(.) const ::
(b→c)→((a→b)→(a→c)) (a→(b→a)) =
(b→c)→((a→b)→(a→c)) (b→(d→b)) = -- (1) See below question
(a→b)→(a→(d→b)) = -- substitute (b→c) by (b→(d→b))
下一步
(.) const const ::
(a→b)→(a→(d→b)) (a→(b→a)) =
(a→b)→(a→(d→b)) (a→(e→a)) = -- (1) See below question
a→(d→(e→a)) -- substitute (a→b) by (a→(e→a)
如果有人用FP语言编程,了解功能组合的结果似乎是非常有效的技能。
答案 0 :(得分:4)
以下是我在精神上的表现。
我有x->y
类型的函数和类型z->t
的函数。如果我想撰写它们,y
和z
必须是同一类型,结果将是x->t
类型。
对于const . const
,两个函数都有a -> (b -> a)
类型,但我需要重命名变量以避免冲突。我有a->(b->a)
和c->(d->c)
。现在c
与b->a
相同。我用第二种类型替换后者,最终结果是a->d->b->a
。
答案 1 :(得分:0)
学习lambda演算,简单地输入lambda演算似乎是一个更有活力的方法的良好开端。
(\f g x -> f (g x)) (\a b -> a) (\a b -> a) =
(\x -> (\a b -> a) ((\a b -> a) x)) =
(\x -> (\a b -> a) (\b -> x)) =
(\x -> (\a b -> a) (\c -> x)) =
(\x -> (\b -> (\c -> x)))