Size: a a a

2021 February 17

DB

Danil Braun in Haskell Start
Jerzy Syrowiecki
наоборот. если есть сопоставление, то зачем if?
А если его нет? Или про if-else if-else мы узнали раньше, чем про PM? Вот допустим сначала рассказываем про условное выражение, а потом, допустим, когда рассказываем про списки, говорим о том, как писать функции для списков. И вот в них используется рекурсивный вызов и pattern matching. Возникает вопрос сразу: а почему бы не написать

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


вместо предложенного

cases (List) lst:
 | empty => ...
 | link(first, rest) => ...
end


Примеры на Pyret написаны, но вы, думаю, понимаете, что я имею в виду.
источник

DB

Danil Braun in Haskell Start
В Haskell нет else if, окей, но в других языках тоже бывает PM, но при этом есть else if, и про условное выражение обычно(?) узнают раньше, чем про PM. Т. е. чем мотивируется введение PM конструкции?
источник

JS

Jerzy Syrowiecki in Haskell Start
Danil Braun
А если его нет? Или про if-else if-else мы узнали раньше, чем про PM? Вот допустим сначала рассказываем про условное выражение, а потом, допустим, когда рассказываем про списки, говорим о том, как писать функции для списков. И вот в них используется рекурсивный вызов и pattern matching. Возникает вопрос сразу: а почему бы не написать

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


вместо предложенного

cases (List) lst:
 | empty => ...
 | link(first, rest) => ...
end


Примеры на Pyret написаны, но вы, думаю, понимаете, что я имею в виду.
если нет сопоставления, то сопоставлять просто нельзя. не с чем сравнивать
источник

DB

Danil Braun in Haskell Start
Ок, так а почему не обходиться условным выражением тогда? Вот в примере выше по сути почти то же самое написано в обоих случаях. Ну, в cases ещё тип проверяется у lst, чтобы он совпал с List.
источник

DB

Danil Braun in Haskell Start
В Haskell меня убедило бы даже то, что не нужно писать вложенные if-else, а если PM в других языках смотреть, есть какая-то общая причина (или причины)?
источник

JS

Jerzy Syrowiecki in Haskell Start
Danil Braun
А если его нет? Или про if-else if-else мы узнали раньше, чем про PM? Вот допустим сначала рассказываем про условное выражение, а потом, допустим, когда рассказываем про списки, говорим о том, как писать функции для списков. И вот в них используется рекурсивный вызов и pattern matching. Возникает вопрос сразу: а почему бы не написать

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


вместо предложенного

cases (List) lst:
 | empty => ...
 | link(first, rest) => ...
end


Примеры на Pyret написаны, но вы, думаю, понимаете, что я имею в виду.
а почему бы не написать [if...] вместо [cases...]

потому что корректность этого кода в общем случае невозможно проверить статически, а кейс — можно
источник

JS

Jerzy Syrowiecki in Haskell Start
Пайрет динамический, в нём это не видно
источник

A

Arjaz in Haskell Start
Danil Braun
В Haskell нет else if, окей, но в других языках тоже бывает PM, но при этом есть else if, и про условное выражение обычно(?) узнают раньше, чем про PM. Т. е. чем мотивируется введение PM конструкции?
Но ведь в хаскелле есть else if
источник

DB

Danil Braun in Haskell Start
Ага, ну вот, т. е. надо говорить про статическую проверку для этого, окей, т. е. знать, что вообще эти слова значат.
источник

DB

Danil Braun in Haskell Start
Arjaz
Но ведь в хаскелле есть else if
Где?
источник

A

Arjaz in Haskell Start
if x == 1 then 1 else if x == 2 then 2 else 3
источник

JS

Jerzy Syrowiecki in Haskell Start
Danil Braun
В Haskell нет else if, окей, но в других языках тоже бывает PM, но при этом есть else if, и про условное выражение обычно(?) узнают раньше, чем про PM. Т. е. чем мотивируется введение PM конструкции?
в теории языков PM мотивируется сумтипами, а if-then-else ничем не мотивируется, это просто сахар над PM
источник

DB

Danil Braun in Haskell Start
Danil Braun
Ага, ну вот, т. е. надо говорить про статическую проверку для этого, окей, т. е. знать, что вообще эти слова значат.
Просто я видел, как они сами (Sh. Krishnamurthi и K. Fisler) это мотивируют, и там про такое ни слова, т. е. это как бы на «начинающих» рассчитано.
источник

A

Arjaz in Haskell Start
Arjaz
if x == 1 then 1 else if x == 2 then 2 else 3
Не нужно так писать никогда. Если очень хочется, есть multi-way if
источник

JS

Jerzy Syrowiecki in Haskell Start
Arjaz
Не нужно так писать никогда. Если очень хочется, есть multi-way if
да ладно, не так уж страшно
источник

JS

Jerzy Syrowiecki in Haskell Start
Danil Braun
Ага, ну вот, т. е. надо говорить про статическую проверку для этого, окей, т. е. знать, что вообще эти слова значат.
дело в типах, да
источник

DB

Danil Braun in Haskell Start
Arjaz
Не нужно так писать никогда. Если очень хочется, есть multi-way if
Так здесь нет else if, здесь отдельно else и if.
источник

DB

Danil Braun in Haskell Start
Jerzy Syrowiecki
а почему бы не написать [if...] вместо [cases...]

потому что корректность этого кода в общем случае невозможно проверить статически, а кейс — можно
А где можно конкретно про это почитать?
источник

A

Arjaz in Haskell Start
Danil Braun
Так здесь нет else if, здесь отдельно else и if.
Тебе хочется elif?
Какая разница?
источник

DB

Danil Braun in Haskell Start
Arjaz
Тебе хочется elif?
Какая разница?
Уровень вложенности увеличивается
источник