Mycroft分布式逻辑语言
什么是Mycroft?
Mycroft是一种逻辑语言,其语法类似于PROLOG。此外,它还支持透明的分布式计算和复合真值。
为什么不只使用PROLOG?
部分出于历史原因,PROLOG相当慢(与其他语言针对许多类问题实施的解决方案相比,最坏情况和平均情况的时间复杂度都很高)。它在单个线程中对逻辑树执行深度优先搜索。无法使用自动备注,因为确定的“纯序言”谓词可以与不确定的谓词(例如I / O和随机数生成)自由混合。隐式并行性的实现很复杂,因为程序假设分支将按顺序运行-意味着任何隐式并行PROLOG需要能够中断和回滚那些不会在纯线性执行模型中运行的分支以保持标准。Mycroft表示谓词是否是确定的。它记住确定谓词的结果,这意味着确定谓词将在第二次运行时立即完成。它记住确定性谓词的中间结果,这意味着即使不确定性谓词依赖于确定性谓词,在第二次运行时其运行速度也会更快。此外,可以将一组Mycroft实例形成一个群集,其中,所有确定谓词的结果都将分配给所有实例,评估谓词的工作可以分布在各个实例之间。
Mycroft与PROLOG有何不同 ?
Mycroft并不执行真正的统一-这意味着 ?- set(X, hello), print(X). 与...不同
?- print(X), set(X, hello).
取而代之的是,Mycroft对谓词中的标识符强制执行功能样式的值单值分配。
由于使用了复合真值,Mycroft隐式支持开放世界的假设-换句话说,无法解析为true的查询被解析为某些非true值,而不一定是false,并且无法解析为所有值都被评估为未知(真值| 0>,也称为NC或“无置信度”)。这意味着您不能用尽力证明-没有与PROLOG内置'/ +'直接对应的Mycroft。Mycroft不会尝试扩展变量的可能值。这与差异#1和#2有关-我们无法扩展到整个Herbrand宇宙,因为我们假设宇宙是开放的,因此我们无法进行真正的统一,因为可以替换的原子集是无界的。这既是肯定的-您不会遇到试图为所有整数评估谓词的偶然无限循环-既是肯定的-您不能隐式地使用此系统进行发现,而是必须生成您所需要的原子集对自己感兴趣并对其进行迭代。