【问题标题】:Logic programming in Lua?Lua中的逻辑编程?
【发布时间】:2012-02-18 08:34:57
【问题描述】:

有没有办法在 Lua 中执行 logic programming(想想 Prolog)?

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

另外:有没有人尝试过在 Lua 中进行逻辑编程之类的事情?


[1] 到目前为止,我只发现 blog post 提到了用 Metalua 编写一个的可能性,但我更希望看到一个与标准 Lua 兼容的。

【问题讨论】:

  • 不都是编程逻辑吗?您可能会为不熟悉逻辑编程的人详细说明一下。我相信你可以使用元表来编造一些东西。
  • 好的,我已经添加了一些关于逻辑编程的提示......你知道,我可以尝试像玩元表这样的东西,但起初我想知道是否有其他人尝试过类似的事情这个在我面前...
  • Google 上的“Lua“逻辑编程”库的第二次点击为您提供了有关 Lua 中多范式编程的 pdf,其中第 5 节有一些对 prolog 的引用。虽然不是一个完整的库(似乎没有),但它可能会给您一些指导。
  • 是的,我以前见过,但是谢谢:-)。那篇文章给出了几点(虽然没有什么实质性的),但似乎在 Lua 世界中还没有更多关于逻辑编程的文章......
  • 您可能会发现这篇文章很有用:fawkesrobotics.org/publications/2010/aaai2010spring-golog-lua

标签: lua logic-programming


【解决方案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)
    )).

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      逻辑编程是一种范式,因此只是一种特定语法形式,您可以在其中陈述一些事实并根据这些事实的逻辑方程式得出结果,而事实本身可能是其他方程式的结果。

      Lua 不是专门为此设计的,但是您可以通过将所有逻辑编程运算符定义为函数来轻松模拟这种行为 - 即 function and(...) 只有在其所有参数都为真时才会返回 true 等,并进行定义您的“事实”作为 metatable 提供的惰性评估表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        相关资源
        最近更新 更多