0

私はこのコードを持っています:

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)

私は何が欠けていますか?

4

1 に答える 1

1

seq(または$!)最初のヘッドの通常形(この場合はコンストラクター)に対してのみ評価します。通常の形式に評価するためにdeepseq(または$ !!(:) )を使用できます。

于 2012-09-12T20:14:47.307 に答える