Комментарии 18
можно ли написать библиотеку
Можно. Механизм работы пролога — это просто обход дерева
en.wikipedia.org/wiki/Tree_traversal
выкинуть пролог на свалку истории
Не нужно выкидывать. Это хороший учебный язык
У меня ощущение, что выбор языка для выбора модели решения задачи — это очень 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);
Все они лучше, чем пролог. Просто потому, что вокруг инфраструктура, удобства и человекочитаемый синтаксис.
Все они лучше, чем пролог
Это неправильная постановка вопроса. Лучше для чего?
Пролог конечно древний язык, но для обучения парадигме логического декларативного программирования он по прежнему хорош. А потом можно писать в этой парадигме, когда она потребуется разумеется, на любом языке
Пролог действительно не годится в 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.
Я могу добавить это в статью
«на конец», «Перменными», «ковычки»,«предкиатами»…
Пролог нужен главным образом, чтобы на его идеях вдохновились и написали Эрланг. :) Почти серьезно, кстати.
В мою студенческую бытность Прол называли инструментом поиска доказательств, типа такая решалка школьных задач по тригонометрии. В этом веке ни разу не видел чтобы где-то искали спецов именно по этой СУБД, а почему?
Пролог не СУБД.
Пролог не СУБД
Это не совсем так. Почти все интерпретаторы пролога — именно СУБД с возможностью динамической подгрузки правил. С компиляторами несколько сложнее.
СУБД — система управления базыми данных. Система.
Например, языки SQL и Prolog — языки программирования, и они входят в СУБД.
Или можно эти языки считать СУБДешками? Я, по правде говоре, не очень силен
itmu.vsuet.ru/Posobija/Predstavlenie_znan/htm/4_pr.htm
Логическое программирование на Prolog для чайников