Выполнение кода пролога на iPhone - PullRequest
16 голосов
/ 11 октября 2010

Мне нужно выполнить код пролога в приложении, которое я делаю.Я знаю, что Apple, вероятно, никогда не допустит чего-то подобного в App Store, но это тоже не намерение.Это скорее частный проект, который никогда не дойдет до App Store.

Цель

В этом случае пролог используется для описания объекта (например, телефона)и его свойства.Объект будет отрисован с помощью OpenGL с использованием координат, указанных в скрипте пролога.Причиной использования пролога является то, что мне нужна возможность запрашивать программу о некоторых функциях этого объекта, и пролог значительно облегчает эту задачу.Итог: мне «нужно» запросить скрипт пролога из моего приложения.

Возможные решения

  • Вставить уже существующую реализацию, написанную на C. Яне уверены, будет ли это вообще работать.
  • Выполните код пролога на другом компьютере и используйте сеть для запроса пролога.
  • Кажется, что в приложении можно запустить некую виртуальную машину Ruby (Насколько я понимаю, это использует поступление blurcocos), можно ли это использовать для запуска одной из реализаций Ruby Prolog?
  • Найти альтернативу Прологу.Это должно дать мне некоторые из тех же возможностей, которые я получаю с прологом.

К сожалению, Google не дает мне почти никаких результатов, поэтому я чувствую, что я могу быть совсем один в этом проекте,Если у кого-то есть опыт или подсказка, я был бы очень благодарен.

Ответы [ 4 ]

6 голосов
/ 11 октября 2010

Столкнувшись с аналогичными трудностями при вызове кода пролога, хотя и в другой ситуации, я бы порекомендовал проверить библиотеку castor c ++. Это позволяет вам писать код логической парадигмы на нативном c ++ без необходимости вообще расширять язык. Поскольку castor - это библиотека только для заголовков, ее легко скомпилировать везде, где доступен c ++.
Сайт Кастора: http://www.mpprogramming.com/cpp/default.aspx

5 голосов
/ 13 июня 2011

Через полгода я просто хотел бы дать некоторое представление об этом.Я закончил тем, что написал сервер с интерфейсом для пролога на Java, принимая вызовы пролога через TCP.Он работает почти так же, как обеспечивает живой интерпретатор пролога SWI-пролог (среди прочих), и в основном работает довольно хорошо.Однако это далеко не оптимальное решение, так как вы не можете вызывать функции из пролога.Вы теряете возможность иметь двустороннюю связь.

Если бы я начал все сначала, я бы наверняка постарался скомпилировать одну из реализаций чистого C для iOS.Я быстро это сделал, но отсутствие опыта не позволило мне даже устранить все ошибки, которые я получил.Судя по тому, что пролог не может быть запущен в качестве фонового процесса на немодифицированной версии iOS, нужно будет немного переписать.Из-за этого, возможно, нужно просто написать новую реализацию (возможно, вдохновленную некоторыми из более легких версий) с нуля, чтобы получить идеальное решение.

3 голосов
/ 11 октября 2010

Вы можете скачать исходный код SWI-Prolog и скомпилировать его с XCODE для платформы iOS.Я никогда не делал этого, но это, безусловно, технически возможно.

Как только вы это сделаете, есть много примеров того, как запустить прологичный код из C / C ++ , следовательно, высможет запустить пролог из Objective-C.

1 голос
/ 15 июня 2012

Между прочим, вы можете довольно легко двунаправленно совершать звонки между Java и SWI-Prolog, если используете JPL:

http://www.swi -prolog.org / packages / jpl /

Это также полностью повторный вход, так что вы можете создать экземпляр кода пролога из Java, который, в свою очередь, создает экземпляр кода Java и т. Д ...

Я делал это для ряда коммерческих проектов несколько летназад, когда мне потребовалось подключить Reasoning Engine на основе Prolog к большому количеству кода Java.

Он использует JNI (собственный интерфейс Java), поэтому вам нужно быть осторожным в том, как вы компилируете и ссылаетесь нанативный интерфейсХотя, если вы скомпилируете его соответствующим образом для каждой платформы, вы можете заставить его работать кроссплатформенно.Он работал на OS-X, Windows, Linux & Solaris.

...