【问题标题】:Wrap State result in a Just包装状态结果为 Just
【发布时间】:2017-06-12 08:52:40
【问题描述】:

我的 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 工作吗?
  • 嗯,确实如此:)。我怎么会错过<$>?谢谢,@瑞恩!如果您遇到麻烦将其发布为答案,我将很乐意接受。
  • 您可能希望将Subst 的定义更改为type Subst = [(Term, Term)],然后在可能无法产生替换的操作上使用Maybe Subst,因为您已经发现了@ 987654335@ 不需要 Maybe 包装器。

标签: haskell monads maybe


【解决方案1】:

您可以使用Just <$> renames rule,其中<$> 操作为fmap

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多