Выполнение прологового кода на iPhone
В настоящее время мне нужно выполнить пролог-код в приложении, которое я создаю. Я знаю, что Apple, вероятно, никогда не допустит что-то подобное в App Store, но это тоже не намерение. Это более частный проект, который никогда не достигнет App Store.
Цель
В этом случае пролог используется для описания объекта (например, телефона) и его свойств. Объект будет нарисован с помощью OpenGL с использованием координат, указанных в прологе script. Причиной использования пролога является то, что мне нужна возможность запросить программу о некоторых функциях, которые этот объект имеет, и пролог облегчает это. Итог: мне нужно "запросить пролог script из моего приложения.
Возможные решения
- Вставить уже существующую реализацию, написанную на C. Я не уверен, что это даже будет работать.
- Выполните пролог на другом компьютере и используйте сеть для запроса пролога.
- Кажется, что можно запустить какой-то Ruby VM внутри приложения (shinycocos использует это, насколько я понимаю), может ли это использоваться для запуска одной из реализаций Ruby Prolog?
- Найдите альтернативу Prolog. Это должно дать мне некоторые из тех же возможностей, которые я получаю с прологом.
К сожалению, google почти не дает мне результатов, поэтому у меня такое чувство, что я могу быть совсем одиноким в этом проекте. Если у кого-нибудь есть какой-либо опыт или ключ, я был бы очень благодарен.
Ответы
Ответ 1
Полгода спустя я просто хотел бы дать некоторое представление об этом. Я закончил тем, что написал сервер с интерфейсом для пролога в Java, приняв пролог-вызовы через TCP. Он работает почти так же, как и интерпретатор пролог-пролога SWI-пролог (среди прочих), и в основном работает достаточно хорошо. Однако это далеко не оптимальное решение, так как вы не можете вызывать функции из внутреннего пролога. Вы теряете возможность иметь двустороннюю связь.
Если бы я начинал все сначала, я бы, конечно, попытался скомпилировать одну из чистых реализаций C для iOS. Я быстро перешел, но мой недостаток опыта помешал мне даже удалить все ошибки, которые я получил. Судя по тому, что вы не можете пролог работать как фоновый процесс в немодифицированной версии iOS, необходимо выполнить некоторую серьезную переписку. Из-за этого, возможно, просто нужно написать новую реализацию (возможно, вдохновленную некоторыми из более легких из них) с нуля, чтобы получить идеальное решение.
Ответ 2
Испытывая аналогичные трудности при вызове прологового кода, хотя и в другой ситуации, я бы рекомендовал проверить библиотеку ccor С++. Это позволяет вам написать код логической парадигмы в языке С++, не требуя расширения языка вообще. Поскольку castor - это только библиотека с заголовком, ее легко компилировать везде, где доступен С++.
Сайт Castor: http://www.mpprogramming.com/cpp/default.aspx
Ответ 3
Вы можете скачать исходный код SWI-Prolog и скомпилировать его с XCODE для платформы iOS. Я никогда этого не делал, но это, безусловно, технически возможно.
Как только вы это сделаете, есть много примеров того, как запускать пролог-код из C/С++, следовательно, вы сможете запустить пролог из Objective-C.
Ответ 4
FYI, вы можете довольно легко двунаправленно совершать вызовы между Java и SWI-Prolog, если вы используете JPL:
http://www.swi-prolog.org/packages/jpl/
Он также полностью повторен, поэтому вы можете создавать пролог-код из java, который, в свою очередь, создает код Java и т.д.
Я сделал это для ряда коммерческих проектов несколько лет назад, когда мне потребовалось подключить Prolog Based Reasoning Engine ко многим Java-кодам.
Он использует JNI (основной интерфейс Java), поэтому вам нужно быть осторожным в том, как вы компилируете и ссылаетесь на собственный api. Хотя, если вы скомпилируете его для каждой платформы, вы можете заставить ее работать на кросс-платформе. Я работал над OS-X, Windows, Linux и Solaris.