2012-02-18 83 views
8

有没有办法在Lua做logic programming(想想Prolog)?Lua中的逻辑编程?

特别是:是否有逻辑编程的Lua模块(miniKanren实现将是最好的,但它不是严格要求)?因为我找不到任何[1]。如果没有,是否有任何已知的(最好尝试过)如何在Lua中进行逻辑编程?

另外:有没有人试图在Lua中做类似逻辑编程的事情?


[1]到目前为止,我只找到blog post提写一个在Metalua的可能性,但我宁愿看到一个与标准的Lua兼容。

+1

是不是所有的编程逻辑?对于不熟悉逻辑编程的人员,您可能会做一些说明。我相信你可以使用metatables来制作一些东西。 – jpjacobs 2012-02-18 15:09:09

+0

好吧,我在逻辑编程中加入了一些提示......你知道,我可以尝试像使用metatables一样的东西,但起初我想知道其他人是否曾尝试在我之前做过这样的事情...... – mnicky 2012-02-19 15:01:07

+0

第二次在谷歌搜索'Lua'逻辑编程“库”时,会给你一个关于Lua中多个范式编程的pdf,其中第5部分对prolog有一些参考。虽然不是一个完整的库(似乎没有一个),它可能会给你一些指示。 – jpjacobs 2012-02-19 18:05:30

回答

-1

逻辑编程是一个范例,因此它只是一种特定语法的形式,您可以在这些事实的逻辑方程中陈述一些事实和基础结果,而事实本身可能是其他方程的结果。

Lua是没有专门为此设计的,但你可以很容易地通过定义所有逻辑编程运营商功能模拟这种行为 - 即function and(...),将返回true只有当其所有参数属实等,并使你的定义“事实“作为由metatable提供的懒惰评估表。

1

有在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) 
    )).