2013-07-10 3 views
1

Мне было интересно, можно ли отменить ленивую оценку в Haskell;
Я бы хотел, чтобы оценка лямбда-термина была прочной нормальной формой.Как заставить оценку лямбда-термина в haskell сильной нормальной форме

Например: Я хотел бы \x -> (\y -> y) x 1 быть сведено к \x -> x 1

Заранее спасибо.

+1

См. Здесь: http://stackoverflow.com/questions/15627849/turn-off-lazy-evaluation-in-haskell –

+0

Я хотел бы указать, что второе предложение делает этот вопрос более конкретным, чем тот, который, предположительно, является дубликатом. – kosmikus

+1

Это не дубликат предлагаемого вопроса. Это касается оценки в лямбда. – augustss

ответ

1

Вы не можете этого сделать. Причина в том, что Haskell не должен выполнять сокращения лямбда-термина. Haskell оценивает программы (лямбда-термины) на значения. Одна из возможностей, как это сделать, - действительно выполнить сокращения лямбда-термина, но это было бы весьма неэффективно. Поэтому компиляторы Haskell используют множество сложных методов, таких как сокращение графика. Поэтому вы не можете наблюдать различия, такие как (\x -> x) y vs y во время процесса оценки - фактических лямбда-терминов не наблюдается.

Обратите внимание, что GHC имеет NFData класс типа, который позволяет оценить условия их нормальных форм с использованием rnf - г -educe к н -ormal е -orm (но только продуктов или побочных продуктов, он по-прежнему Безразлично» t оценивать термины под лямбдами, как отметил @JakeMcArthur). Однако это не дает вам доступа к нормальной форме, выраженной в виде лямбда-термина. Он только сообщает Haskell выполнить эту оценку во время вычисления.

+1

Стоит отметить, что 'NFData' также не уменьшается под лямбдами. –

+0

@JakeMcArthur Хорошая мысль, я обновлю ответ. –

0

Этот вопрос может быть рассмотрен суперкомпьютерами. Прямо сейчас, нет ничего, что действительно хорошо работает с текущими ghc и текущими пакетами.

Там существует старая реализация суперкомпилятора: http://community.haskell.org/~ndm/supero/

I вы заинтересованы в некоторых новых соображений, это может заинтересовать: http://pure.ltu.se/portal/files/2231262/nwpt08-scp.pdf

Однако я не могу ни предложить правильное решение.

Смежные вопросы