2014-03-28 13 views
2

我有對列表,例如[[1,2],[1,3],[1,4],[2,1],[2,2],...]在序言中,我怎麼能在規則失敗之後保持競爭?

function([[H1, H2| _]|Rest]):- 
    conflicts(H1,H2), 
    write('conflict: '), write(H1), writeln(H2), 
    function(Rest). 
function([]). 

我可以將H1作爲「1」,將H2作爲「2」。

規則根據一些規則進行比較,它工作正常。

「1」和「2」衝突。所以conflicts返回true它在第一次迭代時寫入「衝突1 2」。

「1」和「3」不衝突。所以conflicts在第二次迭代時返回false

如您所料,通話以false結束。

我想繼續第三次迭代,第四次和第五次...。如果第三對衝突,它會寫;否則,它將繼續不寫。

我該怎麼做? 非常感謝。

+0

只是一個標誌點:如果你有「雙」,你可以說,'[H1,H2]'。你不需要'[H1,H2 | _]',因爲尾部是'[]'。 @PauloMoura提出了一些更有效的替代方案。 – lurker

回答

2

可以使用的Prolog的if-then-else的控制結構:

function([[H1, H2| _]|Rest]):- 
    ( conflicts(H1,H2) -> 
     write('conflict: '), write(H1), writeln(H2) 
    ; true 
    ), 
    function(Rest). 
function([]). 

順便說一句,表示對,表示如H1-H2(H1, H2)會比使用列表更有效,因爲[H1, H2]只是語法糖爲'.'(H1, '.'(H2, []))

相關問題