unification

    7熱度

    2回答

    我寫了下面的功能: (.>=.) :: Num a => STRef s a -> a -> Bool r .>=. x = runST $ do v <- readSTRef r return $ v >= x 但是當我試圖編譯我得到了以下錯誤: Could not deduce (s ~ s1) from the context (Num a) bound by the

    0熱度

    2回答

    從舊的決賽,我的課: 下面是一些序言代碼: mystery(1, 1). mystery(N, F) :- N1 is N-1, mystery(N1,F1), F is F1*N. 問題1:在 mystery(3, P). 是統一的P什麼樣的價值問題2:如果在Prolog產生並回答神祕之後按分號,並且解釋器最終將報告「錯誤:超出本地堆棧」。爲什麼會發生這種

    4熱度

    2回答

    我正在閱讀紙張Typed Logical Variables in Haskell,但我無法理解最終實現的細節。特別是,回溯狀態變壓器第4節介紹了由於某些原因,不認得我,GHC認爲我需要一個(ST a)例如MonadPlus在功能unify,如下: newtype BackT m a = BT { run :: forall b . (a -> m [b]) -> m [b] } instan

    2熱度

    1回答

    我正在編寫F#中的unification算法,使用"Term Rewriting and All That"(WoldCat)的AST轉換由Franz Baader和Tobias Nipkow使用。對於第4.6節通過轉化統一,這個例子的數學理論太多了,並不像我希望的那樣清楚。 能有人給或指出簡單的例子,讓使用的轉換: 刪除,分解,東方,消除。

    12熱度

    1回答

    我正在實施Hindley-Milner類型推理算法,遵循教程Mark Jones和Oleg Kiselyov。這些都具有與大致形式 applyBindings :: TyEnv -> Type -> Type 施加的tyvar -> ty綁定在TyEnv給定Type一類型的「應用綁定」操作。我發現在我的代碼中忘記調用applyBindings是一個常見的錯誤,並且我沒有從Haskell的類型系

    3熱度

    2回答

    我正在開發(使用Java),爲了好玩,使用統一算法的應用程序。 我選擇了我的統一算法返回所有可能的統一。例如,如果我嘗試解決 加載(X,Y)= SUCC(SUCC(0)) 它返回 {X = SUCC(SUCC(0)),Y = 0 },{X = succ(0),Y = succ(0)},{X = 0,Y = succ(succ(0))} 然而,在某些情況下,存在無限數量的可能統一 (例如,X> Y

    3熱度

    1回答

    假設我有一個替代小號和列表兩個X,在兩個X其中每個變量發生也發生在小號。我將如何找到列表S(Xs),即通過將替代S應用於列表Xs而獲得的列表。 更具體,我有一組謂詞和DCG規則,看起來像 pat(P) --> seg(_), P, seg(_). seg(X,Y,Z) :- append(X,Z,Y). 的。如果我嘗試匹配的模式P有針對列表變量,我收到一個替代小號 : ?- pat([a,X

    1熱度

    2回答

    和「=>」我最近碰到這個代碼示例進來水星: append(X,Y,Z) :- X == [], Z := Y. append(X,Y,Z) :- X => [H | T], append(T,Y,NT), Z <= [H | NT]. 作爲一個Prolog的程序員,我想知道:什麼是正常的統一= 和之間的區別:=或=>哪些在這裏使用? 在Mer

    5熱度

    2回答

    可能重複: Prolog delete: doesn't delete all elements that unify with Element 在Prolog如果你這樣寫: delete([(1,1),(1,2),(1,1),(3,4)],(1,_),L). 結果將是: L = [ (1, 2), (3, 4)]. 什麼是正常的,因爲_ variable在第一個元素中與1綁定,並且它搜索

    5熱度

    1回答

    編輯:解決。我沒有意識到在源文件中啓用語言擴展並沒有在GHCi中啓用語言擴展。該解決方案是在GHCi中的:set FlexibleContexts。 我最近發現Haskell中類和實例的類型聲明是Horn子句。所以我將算術運算從Prolog的第3章編碼到Haskell中。例如: fac(0,s(0)). fac(s(N),F) :- fac(N,X), mult(s(N),X,F). cla