Пропустив что-то со строгостью

У меня есть этот код:

divisors n = 1:[y|y<-[2..(n `div` 2)], n `mod` y == 0]

writeList l = do print "Start"
                 print l

Затем я хочу вызвать функцию со строгим аргументом; Я старался:

writeList $! (divisors 12345678)

а также

(divisors 12345678) \`seq\` (writeList (divisors 12345678))

Но он не ведет себя так, как если бы у него были строгие аргументы: т.е. после "Старт" мне приходится ждать оценки (divisors 12345678)

Что мне не хватает?

1 ответ

Решение

seq(или же $!) Оценивается только для первой головы нормальной формы, а (:) Конструктор в вашем случае, вы можете использовать deepseq(или $!!) для оценки в нормальной форме.

Другие вопросы по тегам