Логические языки - Пролог или Лисп / Smalltalk или что-то еще? - PullRequest
11 голосов
/ 02 января 2009

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

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

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

Thx

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

Ответы [ 5 ]

10 голосов
/ 02 января 2009

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

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

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

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

8 голосов
/ 02 января 2009

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

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

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

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

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

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

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

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

3 голосов
/ 02 января 2009

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

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

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

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

2 голосов
/ 02 января 2009

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

0 голосов
/ 02 января 2009

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

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

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

...