Вопрос в вашем вопросе, похоже, заключается в том, что если я напишу код, подобный Prolog, на Scheme, будет ли он работать хуже, чем если я напишу Prolog на Prolog?
Однозначного ответа нет. На самом деле та часть вашей проблемы, которая хорошо отображается на Prolog, вероятно, будет работать хуже, чем в Prolog. Почему? Потому что все встроенные функции Prolog написаны на Prolog, а все ваши встроенные функции написаны на Scheme. Как @CommuSoft указывает на append/3
, реализация встроенных функций Prolog может использовать сильные стороны Prolog. В этих краях вам предстоит нелегкая битва. Кроме того, имеющиеся у нас реализации Пролога достаточно стары, чтобы мы десятилетиями работали над улучшением производительности унификации, потому что это интересная область здесь.
В то же время, большинство важных программ Prolog в конечном итоге заканчиваются некоторыми процедурными элементами. Эти биты, вероятно, неконкурентоспособны с C или Scheme, потому что их не так интересно оптимизировать, и какие бы исследования ни проводились по этому поводу, вместо этого проводились в Scheme и ML. Так что вы выиграете в этих областях.
Как пользователь Scheme, я думаю, что вам будет выгоднее писать программы в стиле Scheme: функциональный, с примесью макросов, чтобы придать им декларативный вид. Если у вас есть проблема, которая до неприличия хороша для Prolog, вы всегда можете использовать miniKanren, но держите ее подальше от остальная часть вашей программы. Пусть ваш язык будет вашим языком.
Я не согласен с @ahuemmer по поводу C и Prolog только потому, что труд ограничен, а программы имеют много аспектов помимо производительности. Стоимость авторства C намного выше, поэтому вы будете усерднее использовать более плохие стратегии и в конечном итоге получите менее гибкий код. Даже если вы ограничите пространство проблемы чем-то небольшим и четко определенным, у программиста Prolog будет больше времени, чтобы поэкспериментировать и найти лучшее решение, возможно, с большей временной сложностью. Если мы говорим о неограниченном объеме труда, версия C, вероятно, превзойдет первую версию Prolog. Но нужно учитывать все размеры.
В общем, я считаю, что гораздо важнее приспособить программиста к языку, чем язык к проблеме.
person
Daniel Lyons
schedule
23.12.2015