有没有办法 在 Lua 中进行逻辑编程(想想 Prolog)?
特别是:是否有任何用于逻辑编程的 Lua 模块(miniKanren实现将是最好的,但不是严格要求)?因为我找不到任何[1]。如果没有,是否有任何已知(最好尝试过)的方法如何在 Lua 中进行逻辑编程?
另外:有没有人尝试过在 Lua 中进行逻辑编程之类的事情?
[1] 到目前为止,我发现只有一篇博文提到了用 Metalua 编写一篇文章的可能性,但我更愿意看到一篇与标准 Lua 兼容的文章。
有没有办法 在 Lua 中进行逻辑编程(想想 Prolog)?
特别是:是否有任何用于逻辑编程的 Lua 模块(miniKanren实现将是最好的,但不是严格要求)?因为我找不到任何[1]。如果没有,是否有任何已知(最好尝试过)的方法如何在 Lua 中进行逻辑编程?
另外:有没有人尝试过在 Lua 中进行逻辑编程之类的事情?
[1] 到目前为止,我发现只有一篇博文提到了用 Metalua 编写一篇文章的可能性,但我更愿意看到一篇与标准 Lua 兼容的文章。
Lua 中有一个名为lua-faces的前向链接推理引擎。除了 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)
)).
ASP 会有帮助吗?https://potassco.org/
检查手册https://github.com/potassco/guide/releases/download/v2.1.0/guide.pdf的第 3.1.14 节
逻辑编程是一种范式,因此只是一种特定语法形式,您可以在其中陈述一些事实并将结果基于这些事实的逻辑方程,而事实本身可能是其他方程的结果。
Lua 不是专门为此设计的,但是您可以通过将所有逻辑编程运算符定义为函数来轻松模拟这种行为 - 即仅当其所有参数为真时function and(...)
才会返回true
等,并将您的“事实”定义为具有惰性的表metatable 提供的评估。