Lua中的逻辑编程?

9

有没有一种方法可以在Lua中进行逻辑编程(类似于Prolog)?

特别地,是否有用于逻辑编程的Lua模块(最好是miniKanren实现,但这不是必须的)?因为我找不到任何[1]。如果没有,是否有任何已知的(最好是尝试过的)在Lua中进行逻辑编程的方法?

此外:是否有任何人尝试过在Lua中做类似逻辑编程的事情?


[1] 到目前为止,我只发现了一篇提到使用Metalua编写的博客文章,但我更希望看到一个与标准Lua兼容的。


1
编程不都是逻辑吗?你可以为不熟悉逻辑编程的人详细解释一下。我相信你可以使用元表来创造一些东西。 - jpjacobs
好的,我已经在逻辑编程方面添加了一些提示......你知道,我可以尝试像玩元表这样的东西,但首先我想知道是否有其他人在我之前已经尝试做类似的事情...... - mnicky
在谷歌上搜索“Lua逻辑编程库”的第二个结果会给你一个关于Lua中多范式编程的PDF文档,其中第5节提到了Prolog。虽然不是完整的库(似乎没有一个完整的库),但它可能会给你一些指引。 - jpjacobs
是的,我之前看到过,但还是谢谢 :-)。那段文字提供了一些要点(虽然不太实质),但似乎Lua世界中还没有更多关于逻辑编程的资料。 - mnicky
2
您可能会发现这篇文章有用:http://www.fawkesrobotics.org/publications/2010/aaai2010spring-golog-lua/ - Alexander Gladysh
@AlexanderGladysh 我会检查一下。谢谢! - mnicky
3个回答

1

有一个名为lua-faces的Lua前向链接推理引擎。除了MiniKanRen之外,还有其他几个JavaScript逻辑编程系统可以使用Castl自动翻译成Lua。

我还编写了一个转换器,将Lua的子集转换为Prolog。给定以下输入:

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


0

逻辑编程是一种范式,因此只是特定语法的形式,在其中声明一些事实并基于这些事实的逻辑方程得出结果,而这些事实本身可能是其他方程的结果。

Lua 并非专门为此设计,但您可以通过将所有逻辑编程运算符定义为函数(例如 function and(...) 只有在其所有参数都为 true 时才返回 true 等),并将“事实”定义为具有元表提供的惰性求值的表来轻松模拟此行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接