2010-02-17 59 views
8

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

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

这里就是我希望能够做到:

  • 宣布新的逻辑变量
  • 绑定一个log.var。到一个期限(最好该库允许完整的Herbrand条款)
  • 均衡log.vars。 (即统一)
  • log.vars的meta-treatment。 (是否已经磨平?其他log.vars。已经被均衡了?......)
  • 最终,库甚至支持匹配,即单侧统一。

有没有人知道所有这些功能的库,或者至少可以作为起点的库?

+0

自从最后一个答案出现以后,有没有人知道这方面的进展? (2010) – mavnn

回答

2

Mini-Kanren已被implemented for Scala。我不是一个.NET程序员,也不能说这对你有多大用处,但是Mini-Kanren可以用程序化的逻辑变量语言来满足你的需求:如果.NET中的Scala嵌入的属性与你在之后,那么你应该在那里。

3

我不知道一个图书馆是不是你想要的。但是,我确实在this blog entry中实现了“在F#中联合查找”。从我的大学时代起,我似乎记得一些关于Scheme的畅销书有一个基本的统一算法,我曾经在当天编写了一个'mini-prolog'实现。所以我觉得这是一个有正确经历的人可以在周末放在一起,以防有人在那里寻找一个项目。 (也许我会把它添加到我自己的周末TODO列表中。)

+0

也许你正在考虑The Reasoned Schemer?它定义了一个名为mini-kanren的DSL,它与Scheme很好地结合,并且对F#的转换不应该很难。 –

+1

没关系。但正如我上面所说,我正在寻找现有的代码。这并不是说我无法自行实施这一切,但如果其他人已经完成了这项工作,那将浪费时间。 – Frank

4

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

该代码使用命令性更新来反映由于统一导致的替换,并且它使用成功延续。因此,它与Kanren相对不同。

我不知道有多少意义上的音符会自己做,但你可以找到在年底这个嵌入: http://undergraduate.csse.uwa.edu.au/units/CITS3242/16-logic-prog.pdf

我可以要求提供此嵌入的改良版本。