将 State 结果包装成 Just
Wrap State result in a Just
我的 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
中?我想做的事情有名字吗?
谢谢!
可以使用Just <$> renames rule
,其中<$>
操作为fmap
。
我的 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
中?我想做的事情有名字吗?
谢谢!
可以使用Just <$> renames rule
,其中<$>
操作为fmap
。