Як моя перша мова програмування, я вирішив вивчити Haskell. Я фахівець з аналітичної філософії, і Хаскелл дозволив мені швидко і правильно створювати програми, що представляють інтерес, наприклад, перетворювачі для синтаксичного аналізу природної мови, доводи теореми та інтерпретатори. Хоча я програмував лише два з половиною місяці, мені здалося, що семантика і синтаксис Хаскелла набагато простіший у вивченні, ніж більш традиційні імперативні мови, і почуваю себе комфортно (зараз) з більшістю його конструкцій.
Проте програмування в Haskell схоже на чаклунство, і я хотів би розширити свої знання програмування. Я хотів би вибрати нову мову програмування для вивчення, але мені не вистачає часу, щоб підібрати довільну мову, кинути її та повторити. Тож я подумав поставити тут питання разом із кількома умовами щодо типу мови, яку я шукаю. Деякі суб’єктивні, інші призначені для полегшення переходу від Хаскелла.
- Сильна система типу. Однією з моїх улюблених частин програмування в Haskell є написання декларацій типу. Це допомагає структурувати мої думки про окремі функції та їх зв’язок із програмою в цілому. Це також полегшує неофіційні міркування щодо правильності моєї програми. Мене турбує коректність, а не ефективність.
- Акцент на рекурсії, а не на ітерації. Я використовую ітеративні конструкції в Haskell, але реалізую їх рекурсивно. Однак набагато легше зрозуміти структуру рекурсивної функції, ніж складна ітераційна процедура, особливо при використанні комбінаторів та функцій вищого порядку, таких як карти, складки та прив'язка.
- Нагорода за навчання. Haskell - це корисна мова для роботи. Це трохи схоже на читання Канта. Мій досвід декількох років тому з C, проте, не був. Я не шукаю C. Мова повинна застосовувати концептуально цікаву парадигму, чого, на мою цілком суб'єктивну думку, C-лайки не роблять.
Зважування відповідей : Звичайно, це лише примітки. Я просто хотів би відповісти усім, хто дав чітко сформовані відповіді. Ви дуже допомогли.
1) Кілька відповідей показали, що сильна, статично набрана мова, що підкреслює рекурсію, означає іншу функціональну мову. Хоча я хочу продовжувати активно працювати з Хаскеллом, Камканн та Ларсманс правильно зазначили, що інша така мова "занадто полегшить перехід". Ці коментарі були дуже корисні, тому що я не хочу писати Haskell у Caml! З асистентів доказу Кок і Агда виглядають цікаво. Зокрема, Coq дасть вагомий вступ до конструктивної логіки та формальної теорії типу. Я провів трохи часу з предикатом першого порядку та модальною логікою (Менделсон, Ендертон, дещо з Хінмана), тому, мабуть, мені було б дуже весело з Coq.
2) Інші вкрай сприятливі Lisp (Common Lisp, Scheme та Clojure). З того, що я зібрав, як Common Lisp, так і Scheme мають чудові вступні матеріали ( Про Lisp і The Reasoned Schemer , SICP ). Матеріали в SICP змушують мене схилятися до схеми. Зокрема, схема через SICP охоплювала б іншу стратегію оцінки, реалізацію лінощів та можливість зосередитись на таких темах, як продовження, інтерпретатори, символічні обчислення тощо. Нарешті, як зазначали інші, обробка кодом / даними Ліспа була б абсолютно новою. Отже, я сильно схиляюся до варіанту (2), Lisp.
3) По-третє, Пролог. Пролог має безліч цікавих матеріалів, і основних доменом є саме той, який мене цікавить. Він має простий синтаксис і легко читається. На даний момент я не можу більше коментувати, але, прочитавши огляд Прологу та знявши деякі вступні матеріали, він посідає місце (2). І здається, що зворотне відстеження Пролога завжди зламується на Haskell!
4) З основних мов Python виглядає найцікавішим. Тім Йейтс робить мови дуже привабливими. Очевидно, Python часто викладають на спеціальностях CS першого курсу; тож це або концептуально багате, або його легко вивчити. Мені доведеться провести більше досліджень.
Дякую всім за рекомендації! Схоже, Lisp (Схема, Clojure), Пролог або асистент, як Coq або Agda, є основними рекомендованими мовами.