有没有一种方法可以在Lua中进行逻辑编程(类似于Prolog)?
特别地,是否有用于逻辑编程的Lua模块(最好是miniKanren实现,但这不是必须的)?因为我找不到任何[1]。如果没有,是否有任何已知的(最好是尝试过的)在Lua中进行逻辑编程的方法?
此外:是否有任何人尝试过在Lua中做类似逻辑编程的事情?
[1] 到目前为止,我只发现了一篇提到使用Metalua编写的博客文章,但我更希望看到一个与标准Lua兼容的。
有没有一种方法可以在Lua中进行逻辑编程(类似于Prolog)?
特别地,是否有用于逻辑编程的Lua模块(最好是miniKanren实现,但这不是必须的)?因为我找不到任何[1]。如果没有,是否有任何已知的(最好是尝试过的)在Lua中进行逻辑编程的方法?
此外:是否有任何人尝试过在Lua中做类似逻辑编程的事情?
[1] 到目前为止,我只发现了一篇提到使用Metalua编写的博客文章,但我更希望看到一个与标准Lua兼容的。
有一个名为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
print_each(The_list) :-
forall(member(Item,The_list),(
writeln(Item)
)).
逻辑编程是一种范式,因此只是特定语法的形式,在其中声明一些事实并基于这些事实的逻辑方程得出结果,而这些事实本身可能是其他方程的结果。
Lua 并非专门为此设计,但您可以通过将所有逻辑编程运算符定义为函数(例如 function and(...)
只有在其所有参数都为 true 时才返回 true 等),并将“事实”定义为具有元表提供的惰性求值的表来轻松模拟此行为。