有没有办法在Lua做logic programming(想想Prolog)?Lua中的逻辑编程?
特别是:是否有逻辑编程的Lua模块(miniKanren实现将是最好的,但它不是严格要求)?因为我找不到任何[1]。如果没有,是否有任何已知的(最好尝试过)如何在Lua中进行逻辑编程?
另外:有没有人试图在Lua中做类似逻辑编程的事情?
[1]到目前为止,我只找到blog post提写一个在Metalua的可能性,但我宁愿看到一个与标准的Lua兼容。
有没有办法在Lua做logic programming(想想Prolog)?Lua中的逻辑编程?
特别是:是否有逻辑编程的Lua模块(miniKanren实现将是最好的,但它不是严格要求)?因为我找不到任何[1]。如果没有,是否有任何已知的(最好尝试过)如何在Lua中进行逻辑编程?
另外:有没有人试图在Lua中做类似逻辑编程的事情?
[1]到目前为止,我只找到blog post提写一个在Metalua的可能性,但我宁愿看到一个与标准的Lua兼容。
时代他们是A-了变化,现在有minikanren的多种实现在Lua:
逻辑编程是一个范例,因此它只是一种特定语法的形式,您可以在这些事实的逻辑方程中陈述一些事实和基础结果,而事实本身可能是其他方程的结果。
Lua是没有专门为此设计的,但你可以很容易地通过定义所有逻辑编程运营商功能模拟这种行为 - 即function and(...)
,将返回true
只有当其所有参数属实等,并使你的定义“事实“作为由metatable提供的懒惰评估表。
有在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)
)).
是不是所有的编程逻辑?对于不熟悉逻辑编程的人员,您可能会做一些说明。我相信你可以使用metatables来制作一些东西。 – jpjacobs 2012-02-18 15:09:09
好吧,我在逻辑编程中加入了一些提示......你知道,我可以尝试像使用metatables一样的东西,但起初我想知道其他人是否曾尝试在我之前做过这样的事情...... – mnicky 2012-02-19 15:01:07
第二次在谷歌搜索'Lua'逻辑编程“库”时,会给你一个关于Lua中多个范式编程的pdf,其中第5部分对prolog有一些参考。虽然不是一个完整的库(似乎没有一个),它可能会给你一些指示。 – jpjacobs 2012-02-19 18:05:30