8

我正在寻找一个允许我在 F# 中使用逻辑变量的库/程序集。我想避免在实现所需的联合查找数据结构、统一代码等方面重新发明轮子。

我找到了 Prolog.NET,但手册有点稀疏。我不想要一个成熟的 Prolog 实现,而只是它对逻辑变量的处理和手册在这方面有点缺乏。

这是我希望能够做到的:

  • 声明新的逻辑变量
  • 绑定一个 log.var。到一个术语(最好图书馆允许完整的 Herbrand 术语)
  • 均衡 log.vars。(即统一)
  • log.vars 的元处理。(它是地面吗?其他 log.vars。它被均衡了吗?...)
  • 最终,该库甚至支持匹配,即单向统一。

有谁知道做这一切的任何图书馆,或者至少可以用作起点的图书馆?

4

3 回答 3

4

我在 F# 中有一个基本的逻辑编程嵌入。我为我教授的“编程范式”课程开发了它,该课程自始至终都使用 F#,并包括一些关于逻辑编程的讲座。

该代码使用命令式更新来反映由于统一导致的替换,并使用成功延续。所以它与例如 Kanren 相对不同。

我不确定这些笔记本身会有多大意义,但你可以在结尾处找到这个嵌入:http: //undergraduate.csse.uwa.edu.au/units/CITS3242/16-logic-prog。 pdf

我可以根据要求提供此嵌入的改进版本。

于 2010-08-02T15:52:28.877 回答
3

我不知道有一个图书馆可以满足你的要求。但是,我在此博客条目中确实有“F# 中的联合查找”的实现。从我大学时代开始,我似乎记得一些关于 Scheme 的流行书籍中有一个基本的统一算法,我曾经用它来编写一个“迷你序言”实现。所以我觉得这是一个有合适经验的人可以在周末完成的事情,以防有人正在寻找一个项目。(也许我会把它添加到我自己的周末 TODO 列表中。)

于 2010-02-17T15:56:29.590 回答
2

Mini-Kanren 已经为 Scala 实现了。我不是 .NET 程序员,不能说这对您有多大用处,但 Mini-Kanren 在程序化逻辑变量语言方面符合您的要求:如果 .NET 中嵌入的 Scala 具有与什么兼容的属性你在之后,那么你应该在那里。

于 2010-02-25T08:29:58.733 回答