PythonとPrologをつなげて、プログラミングを強化しよう。
このシステムは、スムーズな機能のためにPythonとPrologを統合してるよ。
― 1 分で読む
PythonとPrologは、目的が異なる二つのプログラミング言語だけど、一緒にうまく使えるんだ。Pythonは扱いやすくてコミュニティも大きく、データ分析や機械学習に使えるライブラリがたくさんあるのが特徴。Prologは論理ベースのアプローチを使っていて、特に複雑な問題解決が得意だよ。
この二つの言語にはいくつかの共通点があって、どちらもCで作られていて、再帰的に定義できる型を使ってデータを扱うんだ。つまり、自分自身を参照するデータ構造を作れるってこと。
この記事では、PrologとPythonをつなげるシステムについて話してる。このシステムを使うと、二つの言語が一つのプロセスで一緒に動けて、情報を素早くやり取りできるから、常に切り替える必要がなくなるんだ。
この二つの言語の組み合わせは、自然言語処理や視覚データ分析、ロボットの自動化など、いろんな分野で役立つよ。このシステムは、XSBという特定のPrologのバージョン用に最初に開発されたけど、他のPrologのバージョンでも簡単に採用できるようになってる。
現代のPrologシステムの能力
今の現代的なPrologシステムは、研究と開発のおかげで機能が豊富になってる。SWI、SICStus、Ciao、YAP、ECLIPSe、GNU Prolog、Picat、Trealla、Tau、XSBなど、いろんなバージョンがあって、多くはProlog言語の公式標準に従いながら、追加機能も提供してるんだ。
たとえば、特定のタスクに特化したPrologシステムもあるよ。Picat、SICStus、ECLIPSeは制約評価が得意だし、Ciaoはプログラム解析に向いてる柔軟な構文を持ってる。YAPは速度が評判で、SWIは複数スレッドをサポートする安定した環境を提供してる。XSBは複雑な情報を保存・取得するための革新的な技術を持ってるね。
でも、これらの利点があるにもかかわらず、Prologは業界であまり採用されてないんだ。その理由の一つは、Prologに習熟したプログラマーがあまりいないこと。もう一つは、Prolog用のパッケージがJavaやPython、JavaScriptのような言語に比べてかなり制限されてるからで、企業がPrologを製品に完全に活用するのが難しくなってるんだ。
PrologとPythonの統合
ここで話してるシステムは、PrologとPythonを一つの作業環境に統合して、開発者が二つの言語でシームレスにコードを書けるようにしてる。このおかげで、片方の言語にすでに存在する機能を他方の言語で書き直す必要がなくなるんだ。
Pythonはこの統合にぴったりな理由がいくつかあって、特に商業的や科学的な場面で世界中で最も使われてるプログラミング言語の一つだし、パッケージ管理システムもすごく使いやすいから。Prologと同じく、Pythonの主なバージョンであるCPythonもCで作られてるから、二つの言語をリンクしやすいんだ。
さらに、PythonはPrologのように動的型付けをするから、プログラム実行中に変数の型が変わることができる。Pythonのリストや辞書のようなデータ構造は、簡単にPrologの項に変換できるから、二つの言語は互換性があるんだ。
PrologとPythonの接続を簡単にするために、システムはわかりやすい設定手順を提供してる。最初のバージョンはXSB用に開発されて、その配布に含まれてる。インストールプロセスでは、PrologまたはPythonが必要に応じて相手を呼び出せるようになってるし、Python経由で簡単にインストールできるPyPIリポジトリのバージョンもあるよ。
昨年の発表以来、このシステムはすでに多くの商業アプリケーションで使われてて、大規模なデータセットの分析や自然言語の理解、クエリの回答、自律エージェントが周囲を理解する手助けなどに活用されてる。システムは他のPrologのバージョンにも簡単に適応できることが示されてるんだ。
プログラマーのインターフェース
このシステムのインターフェースでは、プログラマーがPythonまたはPrologの関数をシームレスに呼び出せるようになってる。PrologからPythonの関数を呼ぶ時は、特定の述語を使うんだ。そうすると、自動的にPythonがロードされて、必要なディレクトリへのパスが追加されて、関数呼び出しがスムーズになるんだ。
プログラマーはデータを送信して結果を受け取るための特定のフォーマットを使って、簡単にPythonの関数を呼び出せるよ。たとえば、PrologのコマンドがPythonのJSONライブラリを呼び出して、JSON文字列をPrologが処理できる構造化フォーマットに変換することもできる。このシステムは裏での詳細を処理してくれるから、プログラマーには簡単なんだ。
PythonからPrologを呼び出す
Pythonからシステムを使う時は、普通のPythonライブラリのようにロードされる。ロードされると、Prologがアクティブになってリクエストを処理できるようになるんだ。Pythonの関数も用意されてて、Pythonから直接Prologコードをコンパイル・実行できるようになってる。
このシステムの目的は、どちらの言語もユーザーにとって自然に感じられるようにすること。PrologがPythonを呼ぶ時は、データ構造や呼び出しがPythonプログラマーにとって扱いやすいように設計されてるし、逆にPythonがPrologを呼ぶ時も、データ構造がPythonで使われるものに似てるから、Prologプログラマーも使いやすくなってるんだ。
パフォーマンスと実装
このシステムのコードベースは比較的小さくて、Cのコードが約1500行、Prologのコードが750行くらいだよ。このシンプルさのおかげで、適応や最適化が簡単で、パフォーマンスも速くなってる。システムはスピードを重視して設計されてて、たくさんの関数呼び出しが素早く行えるんだ。
このシステムの主な機能は、PrologとPythonのデータ構造を相互に変換できること。これにより、PrologがPythonのオブジェクトを理解できて、逆も同様なんだ。データの移動は効率的に処理されてるから、ユーザーは遅延を感じることはないよ。
データ翻訳を容易にするために、二つの言語間の変換を管理するための特定の関数が開発されてる。たとえば、Prologの項をPythonのオブジェクトに変換する時、システムはリストや辞書などのさまざまな型を認識して、それに応じて変換するんだ。これにより、データが両方の言語でそのまま使えたりするんだ。
実際の応用
このシステムはいろんな実際のシナリオで使われてて、その有用性を示してる。いくつかのアプリケーションには、大規模な知識グラフを扱うことがあって、これが情報の複雑なネットワークを分析してインサイトを得るために使われてる。他の使い方には、自然言語理解のためのチャットボットや、タスク管理の自動化システムの開発があるよ。
たとえば、テキストデータの関係性を分析するプロジェクトでは、Prologの推論能力とPythonのデータ処理を統合することで、構造化されていないデータから意味のある結論を引き出せたんだ。別のケースでは、ロボティクスプロジェクトでタスクの自動化を手助けし、二つの言語の強みを活かして機能を向上させることができたんだ。
結論
PrologとPythonの統合は、二つの強力なプログラミング言語の強みを結びつけるものなんだ。互いに協力させることで、開発者はそれぞれのユニークな利点を活かし、複雑な問題に対してより効果的な解決策を作れるようになるよ。
プログラミングの環境が進化し続ける中で、こういうツールがあれば、プログラマーは新しい課題に適応しやすくなるし、仕事に合ったツールを使えるようになるんだ。このPrologとPythonの組み合わせがさまざまな分野、特にAI、データ分析、自動化において明るい未来を持っていることを示すアプリケーションの増加とコミュニティからの継続的なサポートが期待できるよ。
タイトル: The Janus System: Multi-paradigm Programming in Prolog and Python
概要: Python and Prolog express different programming paradigms, with different strengths. Python is wildly popular because it is well-structured, easy to use, and mixes well with thousands of scientific and machine learning programs written in C. Prolog's logic-based approach provides powerful reasoning capabilities, especially when combined with constraint evaluation, probabilistic reasoning, well-founded negation, and other advances. Both languages have commonalities as well: both are usually written in C, both are dynamically typed, and both use data structures based on a small number of recursive types. This paper describes the design and implementation of Janus, a system that tightly combines Prolog and Python into a single process. Janus bi-translates data structures and offers performance of many hundreds of thousands of round-trip inter-language calls per second. Although Janus is still new, it has been used in commercial applications including natural language processing, visual query answering and robotic automation. Janus was developed for XSB, but porting Janus code to a second Prolog has been straightforward, indicating that Janus is a tool that other Prologs may easily adopt.
著者: Theresa Swift, Carl Andersen
最終更新: 2023-08-30 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2308.15893
ソースPDF: https://arxiv.org/pdf/2308.15893
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。
参照リンク
- https://github.com/trealla-prolog/trealla
- https://tau-prolog.org
- https://docs.python.org/3/c-api/index.html
- https://permion.ai
- https://www.dhs.gov/sites/default/files/2022-05/privacy-pia-cbp006
- https://www.elastic.co
- https://engineering.fb.com/2017/03/29/data-infrastructure
- https://geopy.readthedocs.io/en/stable
- https://developers.google.com/maps
- https://cloud.google.com/translate
- https://rdflib.readthedocs.io/en/stable
- https://shapely.readthedocs.io/en/stable/manual.html
- https://spacy.io
- https://www.rdfhdt.org/datasets
- https://github.com/SuLab/WikidataIntegrator
- https://snorkel.ai/
- https://www.ros.org
- https://dx.doi.org/10.4204/EPTCS.385.24
- https://en.wikipedia.org/wiki/Haversine
- https://pypi.org/project/guppy3
- https://docs.python.org/3/c-api/refcounting.html