小编Gho*_*ies的帖子

for循环中的goroutines问题

我试图解决这个问题的练习:

编写一个程序,使用并行计算计算文本中字母的频率.

基本上,我有一个FreqMap类型:

type FreqMap map[rune]int
Run Code Online (Sandbox Code Playgroud)

和一个Frequency功能:

func Frequency(s string) FreqMap {
    m := make(FreqMap)
    for _, v := range s {
        m[v]++
    }
    return m
}
Run Code Online (Sandbox Code Playgroud)

Exercism提供了一个使用递归实现并发版本的示例,但我想使用for 循环实现我自己的版本.我提出了以下解决方案,但不起作用:

func ConcurrentFrequency(l []string) FreqMap {
    c := make(chan FreqMap)
    for i := 0; i < len(l); i++ {
        go func(i int) {
            c <- Frequency(l[i])
        }(i)
    }
    return <- c
}
Run Code Online (Sandbox Code Playgroud)

这似乎只在1次迭代后返回,c似乎只包含1个goroutine的结果; 如果我添加一个,我会得到相同的结果sync.WaitGroup.

你能解释一下我在这里缺少什么吗?

预先感谢您的帮助!

for-loop go goroutine

8
推荐指数
1
解决办法
3247
查看次数

前缀函数作为过滤函数的谓词

这是类型签名和filter函数的定义,从了解你是一个很好的Haskell!:

filter' :: (a -> Bool) -> [a] -> [a]
filter' _ [] = []
filter' p (x:xs)
    | p x = x : filter' p xs
    | otherwise = filter' p xs
Run Code Online (Sandbox Code Playgroud)

书中的用法示例elem如下:

filter' (`elem` ['a'..'z']) "Hell0!"
Run Code Online (Sandbox Code Playgroud)

哪个回报:

"ell"
Run Code Online (Sandbox Code Playgroud)

在这个特定的例子中,是否有可能使用elem前缀函数而不是中缀函数作为谓词?

在更一般的意义上,是否有一种方法只提供第二个参数以部分应用前缀函数?

在此先感谢您的帮助!

haskell predicate infix-notation filter prefix

3
推荐指数
1
解决办法
231
查看次数

标签 统计

filter ×1

for-loop ×1

go ×1

goroutine ×1

haskell ×1

infix-notation ×1

predicate ×1

prefix ×1