![]() | 1 yukirock 2014-11-04 21:09:36 +08:00 ![]() rec.tail 是函合,形如把 f(g(x)) 成 (f . g) x 的形式。一般成前後各留一空格,像 rec . tail 。 foldr 的是返回一合函。它的意是,一 list,如果 list 的有多少能令 predicate x True 的 x,就返回一合了多少 tail 的合函,然後 list 用合函。 不好理解,例子。 *Main> dropWhile'' (<3) [1,2,3,4,5,4,3,2,1] [3,4,5,4,3,2,1] foldr 是右向左,到右的 1,2 accumulator 是 (id . tail . tail);到 3 的候返回 id,相於 accumulator 清空;再到前面的 3 止都是 id,到前面的 2 ,因足 predicate x True,所以返回一 (id . tail),到 1 就成 (id . tail . tail)。最後就相於的 list 用 (id . tail . tail) 一有 tail 的合函。 如果我在 list 前面再加一令 predicate x False 的值例如 3,成 [3,1,2,3,4,5,4,3,2,1],那 foldr 是和先前一右向左,到 list 第二位的 1 (id . tail . tail),然後遇到 3,清空成 id,dropWhile'' 就成了 id [3,1,2,3,4,5,4,3,2,1],返回 [3,1,2,3,4,5,4,3,2,1]。 |
![]() | 2 wcp1231 OP |
![]() | 3 wcp1231 OP |
![]() | 5 wcp1231 OP @yukirock 也是。。国内 haskell 的社区太少了,我都差点去 irc 问了。。。haskell 还能去哪里交流啊? |
![]() | 6 yukirock 2014-11-05 00:07:51 +08:00 @wcp1231 其我也不清楚…… 我上倒是可以用程或者 Facebook,不放的 Haskell 社我倒不常去。反正我西的度是……不做 PL 或者人逼你真必要,把 Learn you a Haskell 看一遍,看看人於 Haskell 的讨论(比如说 http://www.zhihu.com/topic/19593103/hot)差不多了。 |
![]() | 7 ChiangDi 2014-11-05 00:08:20 +08:00 via Android 水木社区的函数式编程板块还是比较活跃的。 |
![]() | 9 yukirock 2014-11-07 03:07:12 +08:00 @wcp1231 看的件倒是有提到一些知名的 Haskell 社: http://shuklan.com/haskell/lec07.html#/0/4 包括 SO,IRC,Reddit 等……然我都用就是了。 |