有没有办法在Lua中做logic programming(想想Prolog)?
特别是:是否有用于逻辑编程的Lua模块(miniKanren实现将是最好的,但并不是严格要求的)?因为我找不到任何[1]。如果没有,是否有任何已知的(最好尝试过)如何在Lua中进行逻辑编程?
另外:有没有人试图在Lua中做类似逻辑编程的事情?
[1]到目前为止,我发现只有blog post提到在Metalua中写一个的可能性,但我宁愿看到一个与标准的Lua兼容。
答案 0 :(得分: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
它将在Prolog中生成此输出:
print_each(The_list) :-
forall(member(Item,The_list),(
writeln(Item)
)).
答案 1 :(得分:0)
ASP会有所帮助吗? https://potassco.org/
查看手册https://github.com/potassco/guide/releases/download/v2.1.0/guide.pdf的第3.1.14节
答案 2 :(得分:-1)
逻辑程序设计是一种范式,因此它只是一种特定语法形式,您可以在这些事实的逻辑方程中陈述一些事实和基础结果,而事实本身可能是其他方程式的结果。
Lua不是专门为此设计的,但您可以通过将所有逻辑编程运算符定义为函数来轻松模拟此行为 - 即function and(...)
仅在其所有参数都为真时返回true
等。 ,并将你的“事实”定义为由metatable提供的懒惰评估表。