2017-06-12 114 views
0

我有一個Haskell功能在我的Prolog解釋分配讀取摺疊狀態的結果在剛剛

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 

,但是這是行不通的,很明顯,因爲我在Just包住State,而不是計算結果。

如何將實際的[(Term, Term)]結果換算爲Just?有什麼我想要做的?

謝謝!

+0

難道只有<$>重命名規則工作? – Ryan

+0

嗯,它確實:)。我怎麼能錯過'<$>'?謝謝,@瑞恩!如果您經歷了發佈該問題的麻煩,我很樂意接受。 – David

+2

您可能希望將'Subst'的定義更改爲'type Subst = [(Term,Term)]',然後對可能無法生成替換的操作使用'Maybe Subst',現在您已經發現了'Subst'不需要'Maybe'封裝的情況。 –

回答

5

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