Prolog, Haskell, Lisp, ...
Разница императивного (привычного большинству, C++, C#) и декларативного (SQL, Prolog, …) программирования заключается в том, что в случае первого – мы говорим какие шаги должен совершить компьютер, чтобы выполнить определенную задачу. В случае второго – мы стараемся в точности изложить данную задачу некоторой системе, которая самостоятельно выполняет перебор, следит за откатами и находит решение.
Ну, если честно, то, особой надобности в этих языках обычному программисту, веб-девелоперу, разработчику аппликух – не вижу. Но я смог для себя сформулировать, в каких случаях подобные языки являются альтернативой императивным языкам.
Иногда необходимо найти среди огромного количества однотипных элементов, удовлетворяющих сложному условию, которое включает так же другие и третьи связанные элементы. В таком случае, можно написать много вложенных циклов по всей онтологии, которая представлена, либо написать один единственный предикат, занимающий две строчки на прологе. Написание на прологе для императивного программиста без опыта декларативного программирования – очень сложное в понимании дело. Поэтому, по началу (а может и далее) программирование на этих языках будет занимать гораздо больше времени и сил. Задачи, в которых стоит использовать такой значительный перебор возникают в задачах распознавания, искусственного интеллекта, нейросетей и подобных.
Для примера. Искусственный интеллект для шашек (который мной писался в качестве курсовой) занимал бы на императивном языке, скажем, 1000 строк кода. Вполне понятного и писал бы я его, скажем, пару вечеров. На прологе – данный ИИ пишется около недели и занимает около 100 строк кода. Причем, этот код куда ближе для понимания обычному человеку, чем код C++. Фактически, мы вместо написания длинной и понятной кодеру инструкции выбираем описание механизмов взаимодействия между объектами, связями.
Для себя я понял, что это -, возможно, неплохой инструмент в некоторых ситуациях, но мне гораздо ближе иметь полный контроль над машиной, управлять порядком прохода по базе данных/знаний, писать подробную и детальную инструкцию, чем сказать машине «должно быть так, а как ты это получишь – меня не волнует». Возможно, в каких-то комплексных задачах, которые я еще не встречал в жизни – пролог и хаскель могут пригодиться. Но я остаюсь при своем. C++ и его родственники – лучше и быть не может.

Отправить комментарий