傻詳細查詢在Prolog: ?-P=[A|B], P=[1,_].
P = [1, _G1091],
A = 1,
B = [_G1091]
B被示出爲[_G1091]表示它是一個非實例變量。但是,如果我改變一點點...... ?-P=[A|B], P=[1|_].
P = [1,B],
A = 1,
突然它不是有意展示我說B的非實例但仍然是一個變量準備統一任何東西..怎麼來的?
我需要統一算法來處理以下情況。 我的表達式樹中的每個節點都有一個列表(關聯)或一組(關聯和交換)的子項。我想獲得所有可能的匹配到一個特定的模式。 這裏是一個例子。讓我們假設我們正在處理的矩陣,使+是可交換*是不可交換的 表達:A + B*C*D + E 或者:Add(A, Mul(B, C, D), E) 模式:X + Y*Z 我看兩場比賽 X: A + E
Y: B
Z: C * D
X
在Haskell,我已經定義了一個多態數據類型Subst a與單個構造S :: [(String, a)] -> Subst a爲這樣: data Subst a where
S :: [(String, a)] -> Subst a
deriving (Show)
我想定義一個函數get::String -> Subst a -> Maybe a採用可變名字和一個取代,並
我已經寫了一個Haskell功能,像這樣: shift :: Subst a -> Subst a
shift (S s) = [(x, (subst s' d)) | (x,d) <- s] where
s' = [(x,d) | (x,d) <- s, null (vars d)]
與數據類型,像這樣data Subst a = S [(String,a)] 我已經聲明sub