Haskell или Стандарт ML для новичков? [закрытый]

вы должны использовать

class Post {

    var images: [String]
    let userId: String
    var snapshot : [String : AnyObject]?

}

class User {
    let id: String
}

при получении сообщений, вы можете сделать что-то вроде этого. repo.findPostsByUserId(userId, page, size)

76
задан nbro 21 March 2017 в 13:49
поделиться

6 ответов

Much as I love Haskell, here are the reasons I would prefer SML for a class in discrete math and data structures (and most other beginners' classes):

  • Time and space costs of Haskell programs can be very hard to predict, even for experts. SML offers much more limited ways to blow the machine.

  • Syntax for function defintion in an interactive interpreter is identical to syntax used in a file, so you can cut and paste.

  • Although operator overloading in SML is totally bogus, it is also simple. It's going to be hard to teach a whole class in Haskell without having to get into type classes.

  • Student can debug using print. (Although, as a commenter points out, it is possible to get almost the same effect in Haskell using Debug.Trace.trace.)

  • Infinite data structures blow people's minds. For beginners, you're better off having them define a stream type complete with ref cells and thunks, so they know how it works:

    datatype 'a thunk_contents = UNEVALUATED of unit -> 'a
    | ЗНАЧЕНИЕ
    наберите 'thunk =' a thunk_contents ref
    задержка val: (единица измерения -> 'a) ->' thunk
    Валь сила: гром ->
    

    Теперь это больше не волшебство, и вы можете перейти к потокам (бесконечным спискам).

  • Макет не так прост, как в Python, и может сбивать с толку.

Есть два места, в которых у Haskell есть преимущество :

  • В ядре Haskell вы можете написать сигнатуру типа функции непосредственно перед ее определением. Это очень полезно для студентов и других начинающих. Просто нет хорошего способа работать с сигнатурами типов в SML.

  • У Haskell лучший конкретный синтаксис. Синтаксис Haskell - это значительное улучшение по сравнению с синтаксисом ML. Я написал короткую заметку о том, когда использовать скобки в программе ML ; это немного помогает.

Наконец, есть меч, который режет в обе стороны:

  • Код на Haskell по умолчанию чистый, поэтому ваши ученики вряд ли случайно натолкнутся на нечистые конструкции (монада ввода-вывода, монада состояния). Но к тому же, они не могут печатать, и если вы хотите сделать ввод / вывод, то при минимуме вы должны объяснить нотацию do , а возвращение сбивает с толку.

В связанной теме Вот несколько советов для подготовки к курсу: не забывайте Чисто функциональные структуры данных Криса Окасаки. Даже если ваши ученики не пользуются им, вам обязательно понадобится копия.

85
ответ дан 24 November 2019 в 11:14
поделиться

BTW,

# SML has a truly interactive interpreter in which functions can be both defined and used. In Haskell, functions must be defined in a separate file and compiled before being used in the interactive shell.

Is inaccurate. Use GHCi:

Prelude> let f x = x ^ 2
Prelude> f 7
49
Prelude> f 2
4

There are also good resources for Haskell in education on the haskell.org edu. page, with experiences from different teachers. http://haskell.org/haskellwiki/Haskell_in_education

Finally, you'll be able to teach them multicore parallelism just for fun, if you use Haskell :-)

13
ответ дан 24 November 2019 в 11:14
поделиться

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

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

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

11
ответ дан 24 November 2019 в 11:14
поделиться
  • SML has a truly interactive interpreter in which functions can be both defined and used. In Haskell, functions must be defined in a separate file and compiled before being used in the interactive shell.

While Hugs may have that limitation, GHCi does not:

$ ghci
GHCi, version 6.10.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Prelude> let hello name = "Hello, " ++ name
Prelude> hello "Barry"
"Hello, Barry"

There's many reasons I prefer GHC(i) over Hugs, this is just one of them.

  • SML gives explicit confirmation of the function argument and return types in a syntax that's easy to understand. For example: val foo = fn : int * int -> int. Haskell's implicit curry syntax is a bit more obtuse, but not totally alien. For example: foo :: Int -> Int -> Int.

SML has what you call "implicit curry" syntax as well.

$ sml
Standard ML of New Jersey v110.69 [built: Fri Mar 13 16:02:47 2009]
- fun add x y = x + y;
val add = fn : int -> int -> int

Essentially, SML and Haskell are roughly equivalent. I lean toward Haskell because I'm loving the list comprehensions and infinite lists in Haskell. But I'm worried that the extensive number of symbols in Haskell's compact syntax might cause students problems. From what I've gathered reading other posts on SO, Haskell is not recommended for beginners starting out with FP. But we're not going to be building full-fledged applications, just trying out simple algorithms.

I like using Haskell much more than SML, but I would still teach SML first.

  • Seconding nominolo's thoughts, list comprehensions do seem to slow students from getting to some higher-order functions.
  • If you want laziness and infinite lists, it's instructive to implement it explicitly.
  • Because SML is eagerly evaluated, the execution model is far easier to comprehend, and "debugging via printf" works a lot better than in Haskell.
  • SML's type system is also simpler. While your class likely wouldn't use them anyways, Haskell's typeclasses are still an extra bump to get over -- getting them to understand the 'a versus ''a distinction in SML is tough enough.
9
ответ дан 24 November 2019 в 11:14
поделиться

Мы учим Хаскелла первым годам в нашем университете. Мои чувства по этому поводу немного смешанные. С одной стороны, преподавание Haskell первым годам означает, что им не нужно разучивать императивный стиль. Haskell также может создавать очень лаконичный код, который могут оценить люди, которые раньше имели немного Java.

Некоторые проблемы, с которыми я часто сталкиваюсь у студентов:

  • Сопоставление с образцом может сначала быть немного сложным. Изначально у студентов возникли проблемы с пониманием взаимосвязи между построением стоимости и сопоставлением с образцом. У них также были некоторые проблемы, различающие абстракции. Наши упражнения включали в себя написание функций, которые упрощают арифметическое выражение, и некоторым студентам было трудно увидеть разницу между абстрактным представлением (например, Const 1 ) и представлением метаязыка ( 1 ).

      []
    [Икс]
    (х): XS
    [Х: хз]
    

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

  • Мы не учили наших студентов анонимным функциям, мы просто рассказал им о пунктах , где . Для некоторых задач это было немного многословно, но в остальном работало хорошо. Мы также не сказали им о частичных заявках; это, вероятно, довольно легко объяснить в Haskell (из-за его формы написания), так что, возможно, им стоит показать их.

  • Они быстро обнаружили списки и предпочли их функциям более высокого порядка, таким как фильтр . ], map , zipWith .

  • Я думаю, что мы немного упустили учить их, как позволить им направлять свои мысли по типам. Я не совсем уверен, хотя, полезно ли это для новичков или нет.

  • Сообщения об ошибках обычно не очень полезны для новичков, они могут иногда нуждаться в некоторой помощи с ними. Я сам не пробовал, но есть компилятор Haskell, специально предназначенный для новичков, в основном посредством улучшенных сообщений об ошибках: Helium

  • Для небольших программ такие вещи, как возможные утечки пространства, не были проблемой.

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

  • Сообщения об ошибках обычно не очень полезны для новичков, им иногда может понадобиться некоторая помощь с ними. Я сам не пробовал, но есть компилятор Haskell, специально предназначенный для новичков, в основном посредством улучшенных сообщений об ошибках: Helium

  • Для небольших программ такие вещи, как возможные утечки пространства, не были проблемой.

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

  • Сообщения об ошибках обычно не очень полезны для новичков, им иногда может понадобиться некоторая помощь с ними. Я сам не пробовал, но есть компилятор Haskell, специально предназначенный для новичков, в основном посредством улучшенных сообщений об ошибках: Helium

  • Для небольших программ такие вещи, как возможные утечки пространства, не были проблемой.

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

    Я сам не пробовал, но есть компилятор Haskell, специально предназначенный для новичков, в основном посредством улучшенных сообщений об ошибках: Helium

  • Для небольших программ такие вещи, как возможные утечки пространства, не были проблемой.

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

    Я сам не пробовал, но есть компилятор Haskell, специально предназначенный для новичков, в основном посредством улучшенных сообщений об ошибках: Helium

  • Для небольших программ такие вещи, как возможные утечки пространства, не были проблемой.

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

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

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

    29
    ответ дан 24 November 2019 в 11:14
    поделиться

    Я удивлен, что вы не рассматриваете OCaml и F #, учитывая, что они решают многие из ваших проблем. Несомненно, приличная и полезная среда разработки является приоритетом для учащихся? SML сильно отстает, а F # намного опережает все другие FPL в этом отношении.

    Кроме того, и OCaml, и F # имеют понимание списков.

    4
    ответ дан 24 November 2019 в 11:14
    поделиться
    Другие вопросы по тегам:

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