我的Prolog解释器分配中有一个Haskell函数,内容为
renames :: Rule -> State ExecState [(Term, Term)]
在Prolog规则中产生(几乎)变量的替换(以便变量名称在统一期间不会发生冲突)。
此函数生成的对具有(Variable "X", Variable "X_11")
形式,这意味着变量 X 应重命名为 X_11 等(计数器为重命名包含在ExecState
)中。
问题在于我已将替换定义为
type Subst = Maybe [(Term, Term)]
这是有道理的,因为有时无法找到统一两个术语的替代品。 (但总是找到重命名变量的替代。)
我试过了
renames' :: Rule -> State ExecState Subst
renames' rule = Just $ renames rule
但显然,这不会起作用,因为我将State
包裹在Just
中,而不是计算结果。
如何将实际[(Term, Term)]
结果包装在Just
中?是否有我想要做的名字?
谢谢!