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

StackOverflow https://stackoverflow.com/questions/406426

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Спасибо

Редактировать:Я всегда путаю common lisp с Smalltalk.Извините, что свел эти два языка воедино.Также то , что я имел в виду под "другие люди, которые увлекаются БАЗОВЫМ языком" заключается в том, что я не предпочитаю язык с семантикой, такой как lisp (для людей без опыта работы с CS), и я нахожу Prolog немного более интуитивным (но это мое мнение после того, как я просто немного попортил их оба).

Это было полезно?

Решение

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

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

Если вы твердо решили выучить другой язык, во что бы то ни стало сделайте это.Существует несколько хороших бесплатных (некоторые как в речи, некоторые как в пиве) реализаций Небольшая беседа, Пролог и ШЕПЕЛЯВЫЙ.

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

Другие советы

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

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

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

  • Clojure - Комбинация интеграции LISP, OO и JVM делает эту программу еще менее похожей на БАЗОВУЮ.

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

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

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

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

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

(разве Smalltalk / Lisp / Clojure - это не одно и то же?- как python и ruby?-с точки зрения семантики)

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top