逻辑变量支持.NET

时间:2010-02-17 11:00:03

标签: .net f# logic logic-programming

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

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

以下是我希望能够做到的事情:

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

有没有人知道任何完成所有这些工作的库,或者至少可以用作起点的库?

3 个答案:

答案 0 :(得分:4)

我在F#中有一个基本的逻辑编程嵌入。我为我编写的“编程范式”课程开发了它,它使用了F#,并包含了几个关于逻辑编程的讲座。

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

我不确定这些音符本身有多大意义,但您可以在以下结尾处找到此嵌入:    http://undergraduate.csse.uwa.edu.au/units/CITS3242/16-logic-prog.pdf

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

答案 1 :(得分:3)

我不知道图书馆随便做了你想做的事。但是,我确实在this blog entry中实现了“F#中的union-find”。从大学时代开始,我似乎回想起一些关于Scheme的流行书,其中有一个基本的统一算法,我曾经用它来编写一个“迷你序幕”实现。因此,我觉得这是一个有正确经验的人可以在周末聚会,以防有人在那里寻找项目。 (也许我会将它添加到我自己的周末TODO列表中。)

答案 2 :(得分:2)

Mini-Kanren已经implemented for Scala。我不是.NET程序员,也不能说这对你有多大帮助,但是Mini-Kanren在编程逻辑变量语言方面符合你的要求:如果.NET中的Scala嵌入具有与什么兼容的属性你在追求,那么你应该在那里。