Логические языки - Пролог или Lisp/Smalltalk или что-то еще?

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

Чтобы сказать вам правду, я просто хочу оправдание, чтобы погрузиться в lisp/smalltalk (не то же ли smalltalk/lisp/clojure? - как в python и ruby? - по семантике), но я также хочу, чтобы язык был легко понят другими людьми, которые любят язык Бейсик (вот почему я не выбрал LISP - пока: D).

Я также проверил Пролог, и он кажется довольно классным языком (легко связать данные и проще, чем Lisp), но я хотел бы услышать, что вы думаете.

Спасибо

Редактировать: я всегда путаю обычный шут с Smalltalk. Извините за соединение этих двух языков. Кроме того, что я имел в виду под "другими людьми, которым нравится язык BASIC", это то, что я не предпочитаю язык с семантикой, такой как lisp (для людей без CS-фона), и я считаю, что Prolog немного более интуитивен (но мой мнение после того, как я просто немного перепутал их обоих).

Ответ 1

Есть ли какая-то конкретная причина не использовать R? Это своего рода решение против сборки (или в данном случае загрузки). Если вы делаете статистические вычисления, R имеет много пакетов с полки. Они включают в себя множество библиотек и интерфейсов для различных типов источников данных. Существуют также библиотеки интерфейсов для встраивания R в другие языки, такие как Python, так что вы можете создать гибридное приложение с графическим интерфейсом на Python (например) и ядром вычислительного механизма, используя R.

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

Если у вас есть желание изучать другой язык, обязательно делайте это. Существует несколько хороших бесплатных (некоторые как в речи, некоторые как в пиве) реализаций Smalltalk, Prolog и LISP.

Если вы устанавливаете пользовательский интерфейс в системе, лучшим вариантом может быть Smalltalk. Если вы хотите создавать большие наборы правил как часть вашего приложения, Prolog предназначен для такого рода вещей. Разные люди писали о прозрении LISP, которое влияет на то, как вы думаете о программировании, но я не могу на самом деле ручаться за это на своем опыте - я действительно использовал AutoLISP только для написания сценариев автоматизации на AutoCAD.

Ответ 2

Рискуя оскорбить некоторых, я с трудом примиряюсь с "легко понятными для других людьми, которые любят язык бейсика", с любым языком, который вы упомянули. Это не задумывалось как критика, а как замечание, что у каждого из упомянутых вами языков есть стиль и естественная идиома, которые сильно отличаются от языка BASIC.

  • Smalltalk - чистый OO с нуля, обычно (например, Squeak) в сочетании с интегрированной средой, которая является одновременно IDE и средой выполнения. Теперь вы входите в виртуальную машину Smalltalk и работаете внутри нее, а не просто пишете текст с "исходным кодом".

  • LISP - гораздо ближе к функциональному программированию (хотя и с императивным подтекстом); Префиксная нотация является первым барьером для большинства людей, которым "нравятся" другие языки, но концепция и использование макросов гораздо более существенны.

  • Clojure - Сочетание интеграции LISP, OO и JVM делает его еще менее похожим на BASIC.

  • Python и Ruby - я объединяю их вместе (рискуя еще больше разозлить поклонников обоих ;-), потому что они оба являются ОО-языком с отличными нотациями, которые пойдут извне для обучения. Использование только отступов для вложенного управления в Python и Perl-подобное использование специальных символов в Ruby часто являются предметом жалобы новичков. Хотя оба могут быть написаны в императивном стиле, это будет считаться нестандартным для опытных пользователей.

  • Пролог - это самый непохожий на бейсик из всех упомянутых языков. Все другие языки, которые вы упомянули, могут (ab) использоваться в полупроцедурном стиле, но это практически невозможно в Прологе. Требуется полное понимание и удобство рекурсии, чтобы сделать что-нибудь нетривиальное.

Код, написанный с "родным акцентом" практически на всех этих языках (но особенно на Прологе, ИМХО), будет использовать идиомы и концепции, которые выходят за рамки обычного программирования на языке BASIC. Другими словами, если вы выберете один из них, а затем напишите код "с базовым акцентом", вы в значительной степени потеряете преимущества, которые может предложить язык.

Я считаю, что все они заслуживают изучения для понятий, которым они могут научить (или, по крайней мере, усилить, в зависимости от вашего опыта). Но сходство с языком X (для широкого диапазона значений X) не то, что вы получите.

Ответ 3

Могу ответить частично

(не являются ли Smalltalk/Lisp/Clojure одинаковыми? - как в python и ruby? - по семантике)

Нет. Smalltalk - это ОО-язык с передачей сообщений вместо вызовов методов. Lisp - это Lisp ;-) Это означает действительно функциональный язык с мощной системой макросов, поддержкой OO, которую никогда не видели в других языках (в CL), и многими другими функциями. Закрытие - это язык, похожий на Lisp, без многих функций Lisp, но с хорошей интеграцией в JVM. Это не поддерживает оптимизацию хвостового вызова, например. А python или ruby - это классические императивные ОО-языки с ограниченными функциональными возможностями. Примечание слово ограничено. Например, Гвидо не любит функциональное программирование и удалил некоторые функциональные возможности в версиях 2.5 и 2.6.

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

Ответ 4

Пролог - это совсем другой язык. Это может быть очень трудно понять, главным образом потому, что он в значительной степени полагается на рекурсию, чтобы выполнять очень простые задачи. Если вы действительно готовы, то дайте ему идти. Это может быть очень мощным, потому что это позволяет вытеснять отношения и решать сложные проблемы просто, типичными примерами являются Башни Ханоя или быстрая сортировка. Это изменит то, как вы думаете, что может быть затруднено, если вы привыкли к императивным языкам.

Ответ 5

Если вы заинтересованы в Прологе, то есть бесплатная версия Visual Prolog и коммерческая версия по разумной цене.

Это сильный ответвление Пролога, поэтому он не является вашей классической реализацией языка, но имеет респектабельную историю - Borland продал предка этого DOS как Turbo-Prolog еще в конце 80-х.

Это также только Windows, но ее можно использовать для создания стандартных библиотек DLL Windows, чтобы вы могли связать свой код с "обычным" языком программирования Windows. Я никогда не использовал этот пакет в гневе, но я прошел пару курсов Prolog в Uni, поэтому загружал его время от времени, чтобы поиграть и найти возможные варианты использования, и это выглядит достаточно убедительно. Может быть просто набор винтиков, которые вы ищете.