Какой язык учить после Haskell? [закрыто]

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

Программирование на Haskell - это Однако это похоже на колдовство, и я хотел бы расширить свои познания в программировании. Я хотел бы выбрать новый язык программирования для изучения, но у меня нет времени, чтобы выбрать произвольный язык, отбросить его и повторить. Так что я подумал, что задам вопрос здесь, а также несколько оговорок о типе языка, который я ищу. Некоторые субъективны, некоторые предназначены для облегчения перехода с Haskell.

  • Система строгих типов. Одна из моих любимых частей программирования на Haskell - это написание объявлений типов. Это помогает структурировать мои мысли об отдельных функциях и их отношении к программе в целом. Это также упрощает неформальные рассуждения о правильности моей программы. Меня волнует правильность, а не эффективность.
  • Упор на рекурсию, а не на итерацию. Я использую итеративные конструкции в Haskell, но реализую их рекурсивно. Однако гораздо легче понять структуру рекурсивной функции, чем сложную итеративную процедуру, особенно при использовании комбинаторов и функций более высокого порядка, таких как карты, свертки и связывание.
  • Полезно учиться. Haskell - это полезный язык для работы. Это немного похоже на чтение Канта. Однако у меня несколько лет назад этого не было. Я не ищу C. Язык должен обеспечивать концептуально интересную парадигму, чего, по моему полностью субъективному мнению, C-like не придерживаются.

Взвешивание ответов : Конечно, это всего лишь заметки. Я просто хочу ответить всем, кто дал правильные ответы. Вы очень помогли.

1) В нескольких ответах указывалось, что сильный статически типизированный язык с упором на рекурсию означает другой функциональный язык. Хотя я хочу и дальше активно работать с Haskell, camccann и larsmans правильно отметили, что другой такой язык «слишком облегчит переход». Эти комментарии были очень полезны, потому что я не собираюсь писать Haskell на Caml! Из помощников по доказательству интересно выглядят Coq и Agda. В частности, Coq предоставит основательное введение в конструктивную логику и формальную теорию типов. Я потратил немного времени на предикат первого порядка и модальную логику (Mendellsohn, Enderton, некоторые из Hinman), так что я, вероятно, получил бы много удовольствия от Coq.

2) Другие сильно отдали предпочтение Lisp (Common Lisp, Схема и Clojure). Насколько я понимаю, и Common Lisp, и Scheme имеют отличный вводный материал ( On Lisp и The Reasoned Schemer , SICP ). Материал в SICP заставляет меня склоняться к Scheme. В частности, Scheme через SICP будет охватывать другую стратегию оценки, реализацию лени и возможность сосредоточиться на таких темах, как продолжения, интерпретаторы, символьные вычисления и т. Д. Наконец, как указывали другие, Lisp ' обработка кода / данных будет совершенно новой. Следовательно, я сильно склоняюсь к варианту (2), Lisp.

3) В-третьих, Prolog. В Prolog есть множество интересных материалов, и его первичный домен как раз тот, который мне интересен. Он имеет простой синтаксис и легко читается. На данный момент я не могу комментировать больше, но после прочтения обзора Prolog и беглого просмотра некоторых вводных материалов он оценивается как (2). И похоже, что возврат Пролога всегда взламывается в Haskell!

4) Из основных языков Python выглядит наиболее интересным. Тим Йейтс заставляет языки звучать очень привлекательно. Судя по всему, Python часто преподают на первом курсе специалиста по CS; так что он либо концептуально богат, либо его легко освоить. Придется провести дополнительное исследование.

Спасибо всем за рекомендации! Похоже, что основными рекомендуемыми языками являются Lisp (Scheme, Clojure), Prolog или помощник по доказательству, такой как Coq или Agda.

85
задан animuson 14 November 2013 в 21:04
поделиться