2014 dxdy logo

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

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





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


28/01/17
2
Прошу прощения за дилетантский вопрос, я не знаком с логическим программированием, только лишь присматриваюсь к нему, поэтому, то что я напишу тут, возможно является глупостью. Но, тем не менее.

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

 Профиль  
                  
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение28.01.2017, 13:37 
Модератор
Аватара пользователя


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

 Профиль  
                  
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение28.01.2017, 14:09 


28/01/17
2
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 
Модератор
Аватара пользователя


09/05/12
11067
Кронштадт
questaboutlogic в сообщении #1187983 писал(а):
Это тривиально
Ну как сказать... Тривиально, поскольку задача тривиальна. Но код относительно длинный, а в более сложных случаях будет еще длиннее. У языков, заточенных именно под логическую парадигму, оно короче:
Используется синтаксис Prolog
является(женщина,человек).
является(мужчина,человек).
является(лена,женщина).
является(X,Y):-является(X,Z),является(Z,Y).

 Профиль  
                  
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение28.01.2017, 22:22 
Заслуженный участник
Аватара пользователя


27/04/09
20474
Уфа
questaboutlogic
Тут у вас, во-первых, задействовано только бинарное отношение и, во-вторых, оно является в данном случае отношением частичного порядка, так что подтипированием его представить можно (но и тут везение — не во всех языках из какого-то множества своих типов и подтипирования можно устроить какую угодно решётку). Более общие случаи таким подходом не поднимаются.

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

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

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

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

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


26/05/14
390
Про пользу.
Полезнее изучить Prolog по книге И. Братко. Логическая парадигма уникальна тем, что она не описывает алгоритм напрямую. Вместо алгоритма описывается предметная область. Я был поражён тем, как с такими, на первый взгляд бедными средствами легко можно описать сложные структуры вроде сортированных деревьев.
Практической пользы от Пролога я не получил никакой. Но получил представление о не обычном способе решения многих задач.

 Профиль  
                  
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение29.01.2017, 16:23 
Заслуженный участник
Аватара пользователя


27/04/09
20474
Уфа

(Оффтоп)

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

 Профиль  
                  
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение04.02.2017, 12:26 


17/10/08
969
Что касается Пролога, если мне не изменяет память, то в его основе лежит алгоритм унификации (с небольшим дефектом). Это алгоритм подстановки одной формулы в другую. Реальность описывается с помощью модели на основе так называемых "Предложений". Само описание по-сути представляет набор "деклараций" - оно в значительной мере не императивно и не содержит детальных инструкций.

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

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

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

 Профиль  
                  
 
 Re: Чем отличается логическое программирование от ООП?
Сообщение05.02.2017, 19:27 
Аватара пользователя


07/02/12
1052
Питер
ООП сложно распробовать на задачах типа 'человек ли Лена'. Стоит почитать что-нибудь серьезное по паттернам проектирования и поупражняться на практике какое-то время. По характеру заработанных шишек придет понимание разницы.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: maxal, Karan, Toucan, PAV, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group