2012-02-18 7 views
8

ルーアでlogic programming(Prologと考える)の方法はありますか?Luaでのロジックプログラミングは?

特に:論理プログラミングのためのLuaモジュールがありますか(miniKanren実装は最高ですが、厳密には必須ではありません)?私は何も見つけることができなかったので[1]。もしそうでなければ、Luaで論理プログラミングを行う方法を知っている(できれば試してみた)方法はありますか?

また、Luaでロジックプログラミングのようなことをしようとしている人はいますか?


[1]これまでのところ、私は唯一のblog post Metaluaで1を書くことの可能性に言及見つけたが、私はむしろ、標準のLuaと互換性のあるものを見ることになります。

+1

をすべてのプログラミング・ロジックはありませんか?あなたは、ロジックプログラミングに精通していない人たちのために少し精緻化しているかもしれません。メタテーブルを使って何かを作ることができると確信しています。 – jpjacobs

+0

私はロジックプログラミングについていくつかのヒントを追加しました...あなたが知っているように、私はメタテーブルを使って遊ぶようなものを試すことができますが、最初は誰かが私の前でこのようなことをしようとしているかどうかを知りたかった... – mnicky

+0

2番目のヒットは 'Lua'ロジックプログラミングのためのgoogleで "library"はLuaの複数のパラダイムプログラミングに関するpdfを提供します。セクション5ではプロローグへの参照がいくつかあります。完全なライブラリではありませんが(1つのように見えません)、あなたにいくつかの指針を与えるかもしれません。 – jpjacobs

答えて

-1

論理プログラミングはパラダイムであり、したがって、事実そのものが他の方程式の結果である一方、それらの事実の論理式にいくつかの事実と基本結果を述べる特定の構文の形式にすぎません。

Luaのは、特に、このために設計されていませんが、あなたは簡単な機能として、すべての論理プログラミング演算子を定義することによって、この動作をシミュレートすることができます - すなわちfunction and(...)trueのみすべての引数trueの場合、などを返すこと、そしてあなたの「事実を定義することメタテーブルによって提供される怠惰な評価を持つテーブルとして。

1

のLuaで前進連鎖の推論エンジンがありますlua-facesと呼ばれます。 MiniKanRenに加えて、Castlを使用して自動的にLuaに翻訳されるseveral other logic programming systems in JavaScriptがあります。

また、LuaのサブセットをPrologに変換するwrote a translatorです。この入力を考える:

function print_each(The_list) 
    for _, Item in pairs(The_list) do 
     print(Item) 
    end 
end 

それはPrologで、この出力を生成します:

print_each(The_list) :- 
    forall(member(Item,The_list),(

     writeln(Item) 
    )). 
関連する問題