Haskell не знаю, но очень хочется написать/получить аналог данной программы.
В чём суть проблемы: у меня серьёзное непонимание, почему все примеры на Haskell, которые я находил, грузили максимум 1 ядро процессора. Я и хочу проверить: можно ли загрузить несколько ядер процессора Haskell'ем, или его рантайм этого не умеет. (Маленькая тайна в том, что тестирую под оффтопиком и хочется узнать возможности рантайма именно здесь)
package main
import (
"fmt"
"sync"
)
func fib(n uint64) uint64 {
if n == 0 || n == 1 {
return 1
}
return fib(n - 1) + fib(n - 2)
}
func parfib(t int, n uint64) {
var wg sync.WaitGroup
wg.Add(t)
for i := 0; i < t; i++ {
go func(i int, n uint64) {
defer wg.Done()
fmt.Println(i, fib(n))
}(i, n)
}
wg.Wait()
}
func main() {
parfib(5, 42)
}
Код оптимизировать не надо, нужно именно «в лоб» переписать.
P.S. на golang я в общем то тоже писать не умею, эту программку написал за 5 минут чтения доков.