Haskell рекурсивная космическая утечка - PullRequest
1 голос
/ 07 февраля 2012

[Обновить]

Поэтому я изменил свой код, чтобы сделать его более читабельным.Функция dpfsSat имеет два аргумента, klauselMenge - это огромный набор элементов Xвывод профиля кучи (-hy).Куча полна IntSet.

1 Ответ

1 голос
/ 07 февраля 2012

Если c - это что-то вроде (1+), то это может привести к утечке, когда вы создаете цепочку громов (1+(1+(1+...))). Чтобы избежать этого, используйте seq:

let k' = c u in k' `seq` a k' f l

seq вызовет оценку k', прежде чем можно будет оценить a k' f l, поэтому во многих случаях это устранит утечку пространства.

Тем не менее, seq не является панацеей, и вы должны прочитать о правильном использовании и избегать неправильного использования .

...