2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Чем отличается логическое программирование от ООП?
Сообщение28.01.2017, 12:20 
Прошу прощения за дилетантский вопрос, я не знаком с логическим программированием, только лишь присматриваюсь к нему, поэтому, то что я напишу тут, возможно является глупостью. Но, тем не менее.

Вот, допустим, я задекларировал тип "Человек" от него унаследовал "Мужчина" и "Женщина", затем от "Женщина" унаследовал "Лена". Теперь я могу написать следующие декларации: Лена представитель типа человек? интерпретатор вычислит в истину, Лена представитель типа "Мужчина" -- вычислится в ложь, Лена имеет такое то свойство? --> true or false, Лена цвет волос --> темный, Лена количество рук --> 2... И так далее. Чем это все, собственно говоря, отличается от логического программирования, с концептуальной точки зрения?

 
 
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение28.01.2017, 13:37 
questaboutlogic в сообщении #1187960 писал(а):
Вот, допустим, я задекларировал тип "Человек" от него унаследовал "Мужчина" и "Женщина", затем от "Женщина" унаследовал "Лена". Теперь я могу написать следующие декларации: Лена представитель типа человек? интерпретатор вычислит в истину, Лена представитель типа "Мужчина" -- вычислится в ложь,
Попробуйте написать это на каком-либо конкретном языке, поддерживающем ООП. :-)
questaboutlogic в сообщении #1187960 писал(а):
Чем это все, собственно говоря, отличается от логического программирования, с концептуальной точки зрения?
Закат Солнца вручную всегда возможен. Вопрос лишь в том, насколько это удобно.

 
 
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение28.01.2017, 14:09 
Pphantom в сообщении #1187978 писал(а):
Попробуйте написать это на каком-либо конкретном языке, поддерживающем ООП.

Это тривиально
Код:

Human := Object clone do(
   handsCount := 2
)

Man := Human clone do(
   hasBeard := true
)

Woman := Human clone do(
   hasBeard := false
)

Helen := Woman clone do(
   theColorOfHair := "dark"
)

Helen do(
isKindOf(Human) println     #>>>>true
isKindOf(Man) println       #>>>>false
handsCount println          #>>>>2
theColorOfHair println      #>>>>dark
hasBeard println            #>>>>false
)


Чистейший ООП язык.
http://iolanguage.org/

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

 
 
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение28.01.2017, 15:04 
questaboutlogic в сообщении #1187983 писал(а):
Это тривиально
Ну как сказать... Тривиально, поскольку задача тривиальна. Но код относительно длинный, а в более сложных случаях будет еще длиннее. У языков, заточенных именно под логическую парадигму, оно короче:
Используется синтаксис Prolog
является(женщина,человек).
является(мужчина,человек).
является(лена,женщина).
является(X,Y):-является(X,Z),является(Z,Y).

 
 
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение28.01.2017, 22:22 
questaboutlogic
Тут у вас, во-первых, задействовано только бинарное отношение и, во-вторых, оно является в данном случае отношением частичного порядка, так что подтипированием его представить можно (но и тут везение — не во всех языках из какого-то множества своих типов и подтипирования можно устроить какую угодно решётку). Более общие случаи таким подходом не поднимаются.

-- Вс янв 29, 2017 00:23:44 --

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

-- Вс янв 29, 2017 00:24:27 --

(А вообще, на мой вкус, полезнее изучить функциональный язык со статической типизацией, чем логический язык, даже если тоже со статической типизацией. Разве что рассмотреть только сам механизм вычисления в таких языках.)

 
 
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение29.01.2017, 00:50 
Про пользу.
Полезнее изучить Prolog по книге И. Братко. Логическая парадигма уникальна тем, что она не описывает алгоритм напрямую. Вместо алгоритма описывается предметная область. Я был поражён тем, как с такими, на первый взгляд бедными средствами легко можно описать сложные структуры вроде сортированных деревьев.
Практической пользы от Пролога я не получил никакой. Но получил представление о не обычном способе решения многих задач.

 
 
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение29.01.2017, 16:23 

(Оффтоп)

slavav в сообщении #1188171 писал(а):
Логическая парадигма уникальна тем, что она не описывает алгоритм напрямую.
Ой ну ладно, вместе с механизмом вывода — описывает напрямую. И чтобы писать эффективный код, об этом механизме нужно иметь представление, так что непонятно, в чём в результате будет разница. :roll:

 
 
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение04.02.2017, 12:26 
Что касается Пролога, если мне не изменяет память, то в его основе лежит алгоритм унификации (с небольшим дефектом). Это алгоритм подстановки одной формулы в другую. Реальность описывается с помощью модели на основе так называемых "Предложений". Само описание по-сути представляет набор "деклараций" - оно в значительной мере не императивно и не содержит детальных инструкций.

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

Т.е., на вскидку, основных отличий видится 2:
1. модели мира строятся по разному
2. в Пролог нужно описывать "ЧТО" мы хотим, а в императивных языках нужно указать "КАК"
Понятно, что эти отличия характерны для чистых языков, т.к. языки постоянно развиваются. Уверен, что есть объектные Прологи и есть библиотеки для объектных языков, где можно использовать стиль Пролога. Это явление известно как "мультипарадигмальность".

В книжке Лорьера "Системы искусственного интеллекта" прогресс развития языков видится в увеличении "декларативности" и уменьшения "императивности" (книга где-то 1991 года). Также приводится критерий "настоящей окончательной декларативности", который позволит в каком то смысле говорить о языке искусственного интеллекта: порядок объявления деклараций может быть любым. А в Прологе это не так - все равно нужно следить за тем, в каком порядке будут применяться предложения.

 
 
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение05.02.2017, 19:27 
Аватара пользователя
ООП сложно распробовать на задачах типа 'человек ли Лена'. Стоит почитать что-нибудь серьезное по паттернам проектирования и поупражняться на практике какое-то время. По характеру заработанных шишек придет понимание разницы.

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group