我正在开发一个高阶定理证明器,其中单一化似乎是最困难的子问题。 如果Huet算法仍被认为是最先进的,有没有任何可以让程序员理解的解释它的链接? 或者哪些例子可以说明在哪些情况下它可以工作而通常的一阶算法不行?
有人能解释一下 Prolog 中 == 和 = 运算符的区别吗?我知道 X = Y 的意思是 X 统一于 Y,并且当 X 已经统一于 Y 或可以被统一于 Y 时返回 true,但我不理解这与 == 有什么不同。 跟进问题:那(见已采纳的答案)讲得通。还有一个问题,是否存在这样的情况:X \=...
在ISO Prolog中,一致性仅针对那些不受出现检查限制的情况(NSTO)进行定义。其背后的思想是覆盖程序中大多数使用的一致性情况,并且所有Prolog系统都实际支持这些情况。更具体地,ISO/IEC 13211-1:1995如下所述: 7.3.3 受出现检查(STO)和不受出现检查(NS...
我正在为一种新的函数式编程语言实现一种类型系统,目前正在编写将两种类型统一的函数。需要考虑四种情况:+---------+---------+-------------------------------------------------------+ | k1 | k2 ...
我曾经以为我理解了类似于Scala和Haskell中的模式匹配与在Prolog中发现的协同一致的区别,但是我对Prolog的误解很大。有哪些简单的问题可以通过其中一个解决而无法通过另一个解决?
请问有人知道如何在Prolog中访问列表的特定成员吗?例如,如果我需要访问传递到规则中的列表的第三个或第四个元素怎么办?
为什么这个失败了L is [1,2,3,4],但这个可以运行:L = [1,2,3]? 但是L is 1和L = 1都可以正常工作。
我正在阅读一本人工智能教材,现在来到了这节课最后一个作业题: "用你所选的任何编程语言实现第69页中描述的统一算法。" 在第69页,你可以看到统一算法的伪代码如下:function unify(E1, E2); begin case both...
给定Haskell函数:head . filter fst 现在的问题是如何手动查找类型。如果我让 Haskell 告诉我类型,我会得到: 现在问题是手动如何找到类型。如果我让 Haskell 告诉我类型,那么我会得到:head . filter fst :: [(Bool, b)] -&g...
我经常发现自己想要传递一个带有返回值但没有输入的Func来代替Action,例如:Func<int> DoSomething = ...; Task.Run(DoSomething); 我并不真的关心 DoSomething 的返回值。 但是这些类型不能合一,因此我最终会将...