Pull to refresh

Comments 18

Меня давно интересует вопрос, можно ли написать библиотеку для решения логических задач на general-purpose языке и выкинуть пролог на свалку истории?
можно ли написать библиотеку

Можно. Механизм работы пролога — это просто обход дерева
en.wikipedia.org/wiki/Tree_traversal
выкинуть пролог на свалку истории

Не нужно выкидывать. Это хороший учебный язык
UFO just landed and posted this here

У меня ощущение, что выбор языка для выбора модели решения задачи — это очень 80ые. Причина? Все языки давным-давно обзавелись достаточной выразительной силой, чтобы давать возможность выбирать любую модель для решения задачи.


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


Как язык, пролог душераздирающе ужасен. Почти ровестник кобола и PL/I. Техники логического программирования — why not? Но пролог? Спасибо, не надо.


Вот, например, питон: https://pypi.org/project/pylog/


from typing import Generator

def isEven(i: int) -> Generator[None, None, None]:
    if i % 2 == 0:
        print(f'{i}-even', end = ', ')
        yield 
    else:
        print(f'{i}-odd', end = ', ')

evens = [i for i in range(10) for _ in isEven(i)]

print(f'\n{evens}')

Или https://github.com/kulibali/rslogic для Rust:


use rslogic::state;
use rslogic::state::{Unif, State, PossibleStates};
use rslogic::goal;
use rslogic::goal::{Goal, fail, unify_val, unify_vars, conj, disj, pred};

let s = state::State::<i32>::empty();
let (v1, s) = s.make_var();
let (v2, s) = s.make_var();

let n = 123;
let g = goal::conj(goal::unify_vars(&v1, &v2), goal::unify_val(&v2, n));

let results = g.eval(&s);
assert_eq!(results.len(), 1);
let bound_value = results[0].get(&v1).unwrap();
assert_eq!(bound_value, &n);

Все они лучше, чем пролог. Просто потому, что вокруг инфраструктура, удобства и человекочитаемый синтаксис.

Все они лучше, чем пролог

Это неправильная постановка вопроса. Лучше для чего?
Пролог конечно древний язык, но для обучения парадигме логического декларативного программирования он по прежнему хорош. А потом можно писать в этой парадигме, когда она потребуется разумеется, на любом языке
Спасибо за подробный развернутый ответ и примеры кода, amarao!

Пролог действительно не годится в prodution, но это хороший учебный язык. По крайней мере, я испытал эстетическое удовольствие, что научился основам другой парадигмы программирования.
В начале статьи я указал, что этот туториал будет полезен любознательным и студентам, которым приходится изучать и сдавать Пролог в вузе (коим сам являюсь).
Я старался написать понятно, локанично и не слишком сухо. Это будет полезно для студентов. Ну, например, они смогут быстрее вникнуть в Пролог, а значит меньше потратят времени и поймут, почему пролог — язык не для production.
Все они лучше, чем пролог. Просто потому, что вокруг инфраструктура, удобства и человекочитаемый синтаксис.

Добавлю
habr.com/ru/company/selectel/blog/551576
Я нихрена не понимал пролог в универе, и после универа еще пару раз пытался сам что то читать, но видимо из-за того, что в прологе на каждое человеческий термин есть свой темин, то понять его не реально, там по моему, для затравки, пару месяцев только терминологию учить нужно. Но могу Вас поздравить — в этот раз я смог понять все, что написано до приложения
Разберем правила в Прологе. Напишем ещё одну программу old.pl
. Дальше мой мозг «скрутился в дудочку», видимо нужно «курить» синтаксис. Но тем не менее это самое понятное, что я читал про пролог.

Спасибо за комментарий!
Пролог правда очень непривычный в понимании. Особенно после C/C++, Python.
Сам его только вчера пересдал, эту статью как реферат зачли мне.
Спасибо, что обозначали, что же самое непонятное — синтаксис, терминология.


Идея правила в old.pl, что если для человека X мы найдем такого человека Z, который старше Y и младше X, то X старше Y. То есть X > Y, если X > Z и Z > Y.
Я могу добавить это в статью

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

В мою студенческую бытность Прол называли инструментом поиска доказательств, типа такая решалка школьных задач по тригонометрии. В этом веке ни разу не видел чтобы где-то искали спецов именно по этой СУБД, а почему?

Пролог хороший учебный язык. Замечательный для понимания идеи Логического Программирования. Но его не считают полезным и удобным для прикладных задач. Есть более удобные и мощные решения. Выше в комментариях приводили пример из Python и Rust. Ещё причины непопулярности я указал в конце статьи.
Пролог не СУБД.
Пролог не СУБД

Это не совсем так. Почти все интерпретаторы пролога — именно СУБД с возможностью динамической подгрузки правил. С компиляторами несколько сложнее.
СУБД разве не что-то крупное вроде MySQL, PostgreSQL?
СУБД — система управления базыми данных. Система.
Например, языки SQL и Prolog — языки программирования, и они входят в СУБД.
Или можно эти языки считать СУБДешками? Я, по правде говоре, не очень силен
Я ознакомился. Да, Пролог можно использовать для работы с Базами Данных. Можно даже свою СУБД реализовать. Но это не означает, что сам Пролог есть СУБД
Sign up to leave a comment.

Articles