【发布时间】:2014-12-18 13:01:18
【问题描述】:
考虑到 Haskell 有柯里化函数,我们可以这样做:
foo a b = a + b -- equivalent to `foo a = \b -> a + b`
foo 1 -- ok, returns `\b -> 1 + b`
foo 1 2 -- ok, returns 3
声明函数返回 lambda,就像在注释中一样,也可以正常工作。
但是当我编写这些函数时,像这样:
foo a b = a + b
bar x = x * x
bar . foo 1 -- ok, returns a lambda
bar . foo 1 2 -- wrong, I need to write `(bar . foo 1) 2`
然后它会导致错误。
问题是:为什么函数组合周围的括号是必要的?
【问题讨论】:
-
呃,什么错误?我们不知道错误是什么!放在这里。
-
“没有因使用‘print’而导致 (Show (a0 -> c0)) 的实例”。实际上,这并不是真正的错误。我是说使用
bar . foo 1 2不能按我的意愿工作。 -
但是组合运算符只得到两个参数并返回一个 lambda,好吗?为什么它不能作为正常功能工作?
-
为什么从函数返回 lambda 不像函数组合那样工作?我的意思是,在组合中我需要在一个括号周围加上括号,并且当从函数返回 lambda 时不需要括号。 你的问题不清楚......哪个 函数你指的是什么?
-
@Thelost A lambda IS 一个正常的函数!完全没有区别。
标签: haskell lambda higher-order-functions