2012-10-10 53 views
2

我在序言中有一系列事實包含匿名變量_比較序言匿名變量

fact(a, _). 
fact(b, _). 
fact(c, _). 

和我有一些規則,採取這些事實的名單:

f([H | T]) :- H == fact(a, _), 
       % stuff % 
       . 

然而,這是行不通的。規則不會超過第一個子句H == fact(a, _)。我究竟做錯了什麼?有沒有不同的運營商的平等?

回答

5

是的,你應該使用=/2

1 ?- H == fact(a,_). 
false. 

2 ?- H = fact(a,_). 
H = fact(a, _G0). 

不同的是,==/1檢查如果這兩個條件都是平等的和非實例變量(即具有不同的名稱)被視爲不同。另一方面,=/2統一了這兩個術語,按需要實例化。

如果在頭(f([fact(a,_)|T]):- stuff.)使用實例化模式它與相同的行爲=/2