Понимания действительно ли списка являются большой частью Haskell?

http://www.sqljunkies.com/WebLog/roman/archive/2005/01/30/7037.aspx

-- Disable all table constraints

ALTER TABLE MyTable NOCHECK CONSTRAINT ALL

-- Enable all table constraints

ALTER TABLE MyTable WITH CHECK CHECK CONSTRAINT ALL

-- Disable single constraint

ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

-- Enable single constraint

ALTER TABLE MyTable WITH CHECK CHECK CONSTRAINT MyConstraint

11
задан goetzc 14 November 2016 в 04:13
поделиться

5 ответов

Понимание списков кратко упоминается в главе 12 .

Я обнаружил, что использую комбинации карты и фильтра гораздо чаще, чем понимание списков в Haskell, но в Python I будет чаще использовать понимание списка. Так что я думаю, что отчасти это личный стиль.

Как только вы поймете, как использовать каждую часть понимания списка, что еще вы можете узнать в отношении понимания списка? У вас есть свои входы, ваши условия / охрана и ваши приложения функций для возвращенного списка. Я действительно не вижу обоснованной необходимости в большом разделе, посвященном пониманию списков, в книге.

23
ответ дан 3 December 2019 в 00:56
поделиться

Haskell определяется наличием небольшого набора функциональных возможностей основного языка, окруженного богатым набором синтаксических вариантов. Понимание списков - это один из вариантов, но они не дают ничего, чего не дает монадный сахар, на который RWH тратит всю книгу, строя интуицию. Во многих случаях Haskell предоставляет два синтаксиса для одного и того же, let и where, стиль программирования, ориентированный на регистр и комбинатор, а также понимание списков и монадный сахар.

Понимание списков изначально было реализовано как понимание монад, и этот факт изменился в «великая революция мономорфизации '98» (также известная как Haskell '98). Фактически, дизайн LINQ на языках .NET в значительной степени унаследован от более старого дизайна понимания монад. Понимание списков может быть гораздо более общим, чем они есть, но были намеренно искажены, чтобы облегчить понимание сообщений об ошибках.

Учитывая ограниченное количество бумаги, вы должны выбрать, на каком материале сделать акцент, и RWH по большей части избегает говорить о них, чтобы вы не впадали в ловушка восприятия списков как чего-то особенного.

Тем не менее, есть краткое упоминание о них в главе 12. К этому моменту была создана достаточная интуиция для основных понятий, что они на самом деле не представляют опасности.

В конце концов, название книга - это Real World Haskell. Он хочет научить вас хорошим методам программирования в реальном мире. Некоторые (не все) Haskellers избегают понимания списков, потому что нотация плохо масштабируется и потому что в конечном итоге

[Update: Now that GHC has regained monad comprehensions this objection isn't quite as strong as it used to be. You can get some interesting new functionality out of them.]

15
ответ дан 3 December 2019 в 00:56
поделиться

Понимание списков появляется в основном в небольших примерах обработки списков, многие из которых имеют явно математический характер. Когда вы начинаете изучать более крупные приложения, такие как описанные в Real World Haskell , обработка списков пропорционально составляет гораздо меньшую часть кода. Как уже отмечалось, часто так же удобно использовать map , filter , fold , zip и т. Д., Так как это используется для понимания списка.

Итак

  • В реальной программе на Haskell , лишь небольшая часть списков процессов кода.

  • Лишь небольшая часть кода Haskell, обрабатывающего списки, получается значительно лучше, если он написан с использованием понимания списков.

Практически все понимания списков, которые я пишу, приводят к созданию списков. пар. Однако я не уверен, что в этом можно что-то читать.

Почти все списки, которые я пишу, приводят к созданию списков пар. Однако я не уверен, что в этом можно что-то читать.

Практически все составленные мной списки содержат списки пар. Однако я не уверен, что в этом можно что-то читать.

7
ответ дан 3 December 2019 в 00:56
поделиться

Компоненты списков - это синтаксический сахар для связывания (как в связывании монады) списков.

Другой синтаксический сахар для этого - нотация do. Имхо это лучше, и большой плюс в том, что он работает для всех монад.

Если бы понимания списков не существовало, я думаю, что было бы на одну вещь меньше, и ничего не было бы потеряно (вы можете использовать do-notation вместо этого).

Аргумент в пользу понимания списка состоит в том, что он сделает его более ясным для пользователя, что это список. Имхо, для этого лучше подойдет подпись типа.

5
ответ дан 3 December 2019 в 00:56
поделиться

I see three mentions of list comprehension in RWH.

2
ответ дан 3 December 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: