Size: a a a

2021 February 17

T

The Lord of Hypercom... in Haskell Start
Коряво, но как бы эм
источник

JS

Jerzy Syrowiecki in Haskell Start
Danil Braun
И про сумтипы надо говорить до PM или параллельно с этим? Просто в том же PAPL[1] они так не делают, а сразу используют PM со списками, а уже потом говорится про sum/product-type. И мотивировка у них не такая.

[1] https://papl.cs.brown.edu/2020/
в некоторых курсах про if вообще не рассказывают, только про case.
источник

DB

Danil Braun in Haskell Start
Jerzy Syrowiecki
давай такой пример возьмём

data T = Z | X{x :: Int} | XY{x, y :: Int}

if t == Z then
 0
else
 t.x + t.y


можно здесь использовать t.x? а t.y? почему? как написать алгоритм, который это проверит?
Да, это я понимаю, но там такого примера по началу и нет, там есть data List: empty | link(first, rest) end и можно пользоваться if-else.
источник

DB

Danil Braun in Haskell Start
Т. е. не показываются другие типы суммы кроме списка, поэтому, наверное, такие вопросы и возникают
источник

JS

Jerzy Syrowiecki in Haskell Start
Danil Braun
Да, это я понимаю, но там такого примера по началу и нет, там есть data List: empty | link(first, rest) end и можно пользоваться if-else.
в языке с типами ифом просто нельзя пользоваться в таком случае
источник

JS

Jerzy Syrowiecki in Haskell Start
либо нужен сверхумный иф, который на самом деле сопоставляет с образцом, как в Котлине
источник

JS

Jerzy Syrowiecki in Haskell Start
чтобы скомпилировать такой код

if lst == empty: ...
else: ... lst.first ... lst.rest ...


компилятору надо понять, что такое lst.first. здесь у компилятора нет информации, что у lst есть поле first. кейс даёт такую информацию, а иф не даёт.

вот главное отличие
источник

T

The Lord of Hypercom... in Haskell Start
Значит ли это, что выражения вида`[f x | P]`, где P это условие, являются сахаром для чего-то вроде
L [] = []
L x:xs
| P =  f x : L xs
 ???
источник

DB

Danil Braun in Haskell Start
Jerzy Syrowiecki
чтобы скомпилировать такой код

if lst == empty: ...
else: ... lst.first ... lst.rest ...


компилятору надо понять, что такое lst.first. здесь у компилятора нет информации, что у lst есть поле first. кейс даёт такую информацию, а иф не даёт.

вот главное отличие
Спасибо, так понятнее
источник

JS

Jerzy Syrowiecki in Haskell Start
The Lord of Hypercomplex Numbers
Значит ли это, что выражения вида`[f x | P]`, где P это условие, являются сахаром для чего-то вроде
L [] = []
L x:xs
| P =  f x : L xs
 ???
не значит
источник

JS

Jerzy Syrowiecki in Haskell Start
The Lord of Hypercomplex Numbers
Значит ли это, что выражения вида`[f x | P]`, где P это условие, являются сахаром для чего-то вроде
L [] = []
L x:xs
| P =  f x : L xs
 ???
палка в образце и палка в компрехеншене — это разные синтаксические формы
источник

T

The Lord of Hypercom... in Haskell Start
А, ладно
источник

JS

Jerzy Syrowiecki in Haskell Start
[f x | p] == if p then [f x] else []
источник

T

The Lord of Hypercom... in Haskell Start
L [] = []
L x:xs
| P =  f x : L xs
А эта штука работать вообще будет, не?
источник

JS

Jerzy Syrowiecki in Haskell Start
The Lord of Hypercomplex Numbers
L [] = []
L x:xs
| P =  f x : L xs
А эта штука работать вообще будет, не?
1. функции нельзя с большой буквы называть
2. отступ должен быть перед гардом
3. не знаю, что такое P, но там должно быть булево выражение
4. не все варианты покрыты. что делать, если условие P не выполняется?
5. образец (x:xs) надо взять в скобки
источник

JS

Jerzy Syrowiecki in Haskell Start
отдалённо напоминает комбинацию map . filter
источник

T

The Lord of Hypercom... in Haskell Start
Jerzy Syrowiecki
1. функции нельзя с большой буквы называть
2. отступ должен быть перед гардом
3. не знаю, что такое P, но там должно быть булево выражение
4. не все варианты покрыты. что делать, если условие P не выполняется?
5. образец (x:xs) надо взять в скобки
Ширина отступа фиксирована или лишь бы был?
источник

JS

Jerzy Syrowiecki in Haskell Start
The Lord of Hypercomplex Numbers
Ширина отступа фиксирована или лишь бы был?
лишь бы был, но самый популярный стиль — 2 пробела
источник

AP

Aleksei (astynax) Pi... in Haskell Start
В прикрепе про отступы видео
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Смотрите уже, зря прикреплял что-ли?
источник