有沒有辦法在Lua做logic programming(想想Prolog)?Lua中的邏輯編程?
特別是:是否有邏輯編程的Lua模塊(miniKanren實現將是最好的,但它不是嚴格要求)?因爲我找不到任何[1]。如果沒有,是否有任何已知的(最好嘗試過)如何在Lua中進行邏輯編程?
另外:有沒有人試圖在Lua中做類似邏輯編程的事情?
[1]到目前爲止,我只找到blog post提寫一個在Metalua的可能性,但我寧願看到一個與標準的Lua兼容。
有沒有辦法在Lua做logic programming(想想Prolog)?Lua中的邏輯編程?
特別是:是否有邏輯編程的Lua模塊(miniKanren實現將是最好的,但它不是嚴格要求)?因爲我找不到任何[1]。如果沒有,是否有任何已知的(最好嘗試過)如何在Lua中進行邏輯編程?
另外:有沒有人試圖在Lua中做類似邏輯編程的事情?
[1]到目前爲止,我只找到blog post提寫一個在Metalua的可能性,但我寧願看到一個與標準的Lua兼容。
時代他們是A-了變化,現在有minikanren的多種實現在Lua:
邏輯編程是一個範例,因此它只是一種特定語法的形式,您可以在這些事實的邏輯方程中陳述一些事實和基礎結果,而事實本身可能是其他方程的結果。
Lua是沒有專門爲此設計的,但你可以很容易地通過定義所有邏輯編程運營商功能模擬這種行爲 - 即function and(...)
,將返回true
只有當其所有參數屬實等,並使你的定義「事實「作爲由metatable提供的懶惰評估表。
有在Lua正向鏈推理引擎稱爲lua-faces。除MiniKanRen外,還有several other logic programming systems in JavaScript可以使用Castl自動翻譯成Lua。
我也wrote a translator將Lua的一個子集轉換成Prolog。鑑於此輸入:
function print_each(The_list)
for _, Item in pairs(The_list) do
print(Item)
end
end
它將在序言產生這樣的輸出:
print_each(The_list) :-
forall(member(Item,The_list),(
writeln(Item)
)).
是不是所有的編程邏輯?對於不熟悉邏輯編程的人員,您可能會做一些說明。我相信你可以使用metatables來製作一些東西。 – jpjacobs 2012-02-18 15:09:09
好吧,我在邏輯編程中加入了一些提示......你知道,我可以嘗試像使用metatables一樣的東西,但起初我想知道其他人是否曾嘗試在我之前做過這樣的事情...... – mnicky 2012-02-19 15:01:07
第二次在谷歌搜索'Lua'邏輯編程「庫」時,會給你一個關於Lua中多個範式編程的pdf,其中第5部分對prolog有一些參考。雖然不是一個完整的庫(似乎沒有一個),它可能會給你一些指示。 – jpjacobs 2012-02-19 18:05:30