我知道这可能听起来有些奇怪,但我的问题是:“什么是统一算法”。
我正在尝试开发一个类似于Prolog的F#应用程序。它应该在进行查询时接受一系列事实并对其进行处理。
有人建议我开始实现一个好的统一算法,但我对此一无所知。
如果您想更深入地了解我的要求,请参考this问题。
非常感谢,圣诞快乐。
有人建议我开始实现一个好的统一算法,但我对此一无所知。
如果您想更深入地了解我的要求,请参考this问题。
非常感谢,圣诞快乐。
type Expr =
| Var of string // Represents a variable
| Call of string * Expr list // Call named function with arguments
并且有两个像这样的表达式:
Call("foo", [ Var("x"), Call("bar", []) ])
Call("foo", [ Call("woo", [ Var("z") ], Call("bar", []) ])
"x" -> Call("woo", [ Var("z") ]
Call("foo", ...)
和Call("bar", ...)
),那么该算法将告诉你它们不可统一。在维基百科上也有一些解释,如果你搜索互联网,你肯定会找到一些有用的描述(甚至可能是类似于F#的某些函数语言的实现)。显然,破坏性的统一比纯函数式的效率要高得多,但也不太像F#。如果你追求的是性能,那么最终你可能会实现WAM的子集: