Про seq

Oct. 1st, 2015 12:29 am
deniok: (typed lambda)
[personal profile] deniok
Как известно seq вычисляет свой первый аргумент до слабой заголовочной нормальной формы (WHNF). Не пользуясь GHCi, ответьте на вопрос, каково будет значение следующего выражения
Prelude> (\True y -> ()) False `seq` 5
Проверьте себя в GHCi. Какова будет полученная в первом аргументе seq WHNF?

UPD. А теперь вопрос на засыпку: каково будет значение следующего выражения
Prelude> (\True -> \y -> ()) False `seq` 5
Считаете ли вы это правильным?

Date: 2015-10-02 08:37 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
То есть для меня открытие последних суток в том, что \x -> \y -> body и \x y -> body это в Хаскеле достаточно отличающиеся вещи: первое - неименованная функция арности 1 (несмотря на тип), а второе - арности 2.

Date: 2015-10-02 09:56 pm (UTC)
From: [identity profile] lomeo.livejournal.com
Ну да. Странно.

Date: 2015-10-02 11:22 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
С другой стороны я и раньше знал, что они не идентичны: \b -> \b -> b - допустимое выражение, а \b b -> b - нет. Каждая отдельная лямбда монтирует свою область видимости для связываемой переменной, а двойная - общую для двух переменных.

Date: 2015-10-03 06:53 am (UTC)
From: [identity profile] lomeo.livejournal.com
Это совсем другое, не считается. Я думал, что с точностью до переименований они одинаковые. И, главное, семантически действительно одинаковы, если паттерна нет.

Profile

deniok: (Default)
deniok

February 2022

S M T W T F S
  12345
6789101112
13141516171819
20212223 242526
2728     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 28th, 2025 05:07 am
Powered by Dreamwidth Studios